ACI0.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using System;
  2. using System.IO;
  3. namespace Ryujinx.HLE.Loaders.Npdm
  4. {
  5. class ACI0
  6. {
  7. public string TitleId;
  8. private int FSAccessHeaderOffset;
  9. private int FSAccessHeaderSize;
  10. private int ServiceAccessControlOffset;
  11. private int ServiceAccessControlSize;
  12. private int KernelAccessControlOffset;
  13. private int KernelAccessControlSize;
  14. public FSAccessHeader FSAccessHeader;
  15. public ServiceAccessControl ServiceAccessControl;
  16. public KernelAccessControl KernelAccessControl;
  17. public const long ACI0Magic = 'A' << 0 | 'C' << 8 | 'I' << 16 | '0' << 24;
  18. public ACI0(Stream ACI0Stream, int Offset)
  19. {
  20. ACI0Stream.Seek(Offset, SeekOrigin.Begin);
  21. BinaryReader Reader = new BinaryReader(ACI0Stream);
  22. if (Reader.ReadInt32() != ACI0Magic)
  23. {
  24. throw new InvalidNpdmException("ACI0 Stream doesn't contain ACI0 section!");
  25. }
  26. ACI0Stream.Seek(0x0C, SeekOrigin.Current);
  27. byte[] TempTitleId = Reader.ReadBytes(8);
  28. Array.Reverse(TempTitleId);
  29. TitleId = BitConverter.ToString(TempTitleId).Replace("-", "");
  30. // Reserved (Not currently used, potentially to be used for lowest title ID in future.)
  31. ACI0Stream.Seek(0x08, SeekOrigin.Current);
  32. FSAccessHeaderOffset = Reader.ReadInt32();
  33. FSAccessHeaderSize = Reader.ReadInt32();
  34. ServiceAccessControlOffset = Reader.ReadInt32();
  35. ServiceAccessControlSize = Reader.ReadInt32();
  36. KernelAccessControlOffset = Reader.ReadInt32();
  37. KernelAccessControlSize = Reader.ReadInt32();
  38. FSAccessHeader = new FSAccessHeader(ACI0Stream, Offset + FSAccessHeaderOffset, FSAccessHeaderSize);
  39. ServiceAccessControl = new ServiceAccessControl(ACI0Stream, Offset + ServiceAccessControlOffset, ServiceAccessControlSize);
  40. KernelAccessControl = new KernelAccessControl(ACI0Stream, Offset + KernelAccessControlOffset, KernelAccessControlSize);
  41. }
  42. }
  43. }