diff options
Diffstat (limited to 'src/Ryujinx.HLE/HOS/Services/Mii/Helper.cs')
| -rw-r--r-- | src/Ryujinx.HLE/HOS/Services/Mii/Helper.cs | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/Ryujinx.HLE/HOS/Services/Mii/Helper.cs b/src/Ryujinx.HLE/HOS/Services/Mii/Helper.cs new file mode 100644 index 00000000..b02bbfd1 --- /dev/null +++ b/src/Ryujinx.HLE/HOS/Services/Mii/Helper.cs @@ -0,0 +1,48 @@ +using Ryujinx.Common.Utilities; +using System; +using System.Buffers.Binary; + +namespace Ryujinx.HLE.HOS.Services.Mii +{ + static class Helper + { + public static ushort CalculateCrc16(ReadOnlySpan<byte> data, int crc, bool reverseEndianess) + { + const ushort poly = 0x1021; + + for (int i = 0; i < data.Length; i++) + { + crc ^= data[i] << 8; + + for (int j = 0; j < 8; j++) + { + crc <<= 1; + + if ((crc & 0x10000) != 0) + { + crc = (crc ^ poly) & 0xFFFF; + } + } + } + + if (reverseEndianess) + { + return (ushort)(BinaryPrimitives.ReverseEndianness(crc) >> 16); + } + + return (ushort)crc; + } + + public static UInt128 GetDeviceId() + { + // FIXME: call set:sys GetMiiAuthorId + return UInt128Utils.FromHex("5279754d69694e780000000000000000"); // RyuMiiNx + } + + public static ReadOnlySpan<byte> Ver3FacelineColorTable => new byte[] { 0, 1, 2, 3, 4, 5 }; + public static ReadOnlySpan<byte> Ver3HairColorTable => new byte[] { 8, 1, 2, 3, 4, 5, 6, 7 }; + public static ReadOnlySpan<byte> Ver3EyeColorTable => new byte[] { 8, 9, 10, 11, 12, 13 }; + public static ReadOnlySpan<byte> Ver3MouthColorTable => new byte[] { 19, 20, 21, 22, 23 }; + public static ReadOnlySpan<byte> Ver3GlassColorTable => new byte[] { 8, 14, 15, 16, 17, 18, 0 }; + } +} |
