| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- using Ryujinx.HLE.Exceptions;
- using System.IO;
- using System.Text;
- namespace Ryujinx.HLE.Loaders.Npdm
- {
- //https://github.com/SciresM/hactool/blob/master/npdm.c
- //https://github.com/SciresM/hactool/blob/master/npdm.h
- //http://switchbrew.org/index.php?title=NPDM
- class Npdm
- {
- private const int MetaMagic = 'M' << 0 | 'E' << 8 | 'T' << 16 | 'A' << 24;
- public byte MmuFlags { get; private set; }
- public bool Is64Bits { get; private set; }
- public byte MainThreadPriority { get; private set; }
- public byte DefaultCpuId { get; private set; }
- public int PersonalMmHeapSize { get; private set; }
- public int ProcessCategory { get; private set; }
- public int MainThreadStackSize { get; private set; }
- public string TitleName { get; private set; }
- public byte[] ProductCode { get; private set; }
- public Aci0 Aci0 { get; private set; }
- public Acid Acid { get; private set; }
- public Npdm(Stream stream)
- {
- BinaryReader reader = new BinaryReader(stream);
- if (reader.ReadInt32() != MetaMagic)
- {
- throw new InvalidNpdmException("NPDM Stream doesn't contain NPDM file!");
- }
- reader.ReadInt64();
- MmuFlags = reader.ReadByte();
- Is64Bits = (MmuFlags & 1) != 0;
- reader.ReadByte();
- MainThreadPriority = reader.ReadByte();
- DefaultCpuId = reader.ReadByte();
- reader.ReadInt32();
- PersonalMmHeapSize = reader.ReadInt32();
- ProcessCategory = reader.ReadInt32();
- MainThreadStackSize = reader.ReadInt32();
- byte[] tempTitleName = reader.ReadBytes(0x10);
- TitleName = Encoding.UTF8.GetString(tempTitleName, 0, tempTitleName.Length).Trim('\0');
- ProductCode = reader.ReadBytes(0x10);
- stream.Seek(0x30, SeekOrigin.Current);
- int aci0Offset = reader.ReadInt32();
- int aci0Size = reader.ReadInt32();
- int acidOffset = reader.ReadInt32();
- int acidSize = reader.ReadInt32();
- Aci0 = new Aci0(stream, aci0Offset);
- Acid = new Acid(stream, acidOffset);
- }
- }
- }
|