More case changes on NPDM

This commit is contained in:
gdkchan 2018-08-16 14:04:38 -03:00
parent 7aff3f9b93
commit fcd72d24de
3 changed files with 69 additions and 3 deletions

View file

@ -33,14 +33,14 @@ namespace Ryujinx.HLE.Loaders.Npdm
//Reserved.
Stream.Seek(8, SeekOrigin.Current);
int FSAccessHeaderOffset = Reader.ReadInt32();
int FSAccessHeaderSize = Reader.ReadInt32();
int FsAccessHeaderOffset = Reader.ReadInt32();
int FsAccessHeaderSize = Reader.ReadInt32();
int ServiceAccessControlOffset = Reader.ReadInt32();
int ServiceAccessControlSize = Reader.ReadInt32();
int KernelAccessControlOffset = Reader.ReadInt32();
int KernelAccessControlSize = Reader.ReadInt32();
FsAccessHeader FsAccessHeader = new FsAccessHeader(Stream, Offset + FSAccessHeaderOffset, FSAccessHeaderSize);
FsAccessHeader FsAccessHeader = new FsAccessHeader(Stream, Offset + FsAccessHeaderOffset, FsAccessHeaderSize);
FsVersion = FsAccessHeader.Version;
FsPermissionsBitmask = FsAccessHeader.PermissionsBitmask;

View file

@ -0,0 +1,28 @@
using System.IO;
namespace Ryujinx.HLE.Loaders.Npdm
{
class FsAccessControl
{
public int Version { get; private set; }
public ulong PermissionsBitmask { get; private set; }
public int Unknown1 { get; private set; }
public int Unknown2 { get; private set; }
public int Unknown3 { get; private set; }
public int Unknown4 { get; private set; }
public FsAccessControl(Stream Stream, int Offset, int Size)
{
Stream.Seek(Offset, SeekOrigin.Begin);
BinaryReader Reader = new BinaryReader(Stream);
Version = Reader.ReadInt32();
PermissionsBitmask = Reader.ReadUInt64();
Unknown1 = Reader.ReadInt32();
Unknown2 = Reader.ReadInt32();
Unknown3 = Reader.ReadInt32();
Unknown4 = Reader.ReadInt32();
}
}
}

View file

@ -0,0 +1,38 @@
using System;
using System.IO;
using Ryujinx.HLE.Exceptions;
namespace Ryujinx.HLE.Loaders.Npdm
{
class FsAccessHeader
{
public int Version { get; private set; }
public ulong PermissionsBitmask { get; private set; }
public FsAccessHeader(Stream Stream, int Offset, int Size)
{
Stream.Seek(Offset, SeekOrigin.Begin);
BinaryReader Reader = new BinaryReader(Stream);
Version = Reader.ReadInt32();
PermissionsBitmask = Reader.ReadUInt64();
int DataSize = Reader.ReadInt32();
if (DataSize != 0x1c)
{
throw new InvalidNpdmException("FsAccessHeader is corrupted!");
}
int ContentOwnerIdSize = Reader.ReadInt32();
int DataAndContentOwnerIdSize = Reader.ReadInt32();
if (DataAndContentOwnerIdSize != 0x1c)
{
throw new NotImplementedException("ContentOwnerId section is not implemented!");
}
}
}
}