using System.Runtime.InteropServices;
namespace SabreTools.Data.Models.N3DS
{
///
[StructLayout(LayoutKind.Sequential)]
public sealed class ARM11LocalSystemCapabilities
{
///
/// Program ID
///
public ulong ProgramID;
///
/// Core version (The Title ID low of the required FIRM)
///
public uint CoreVersion;
///
/// Flag1 (implemented starting from 8.0.0-18).
///
[MarshalAs(UnmanagedType.U1)]
public ARM11LSCFlag1 Flag1;
///
/// Flag2 (implemented starting from 8.0.0-18).
///
[MarshalAs(UnmanagedType.U1)]
public ARM11LSCFlag2 Flag2;
///
/// Flag0
///
[MarshalAs(UnmanagedType.U1)]
public ARM11LSCFlag0 Flag0;
///
/// Priority
///
public byte Priority;
///
/// Resource limit descriptors. The first byte here controls the maximum allowed CpuTime.
///
/// 16 entries
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public ushort[] ResourceLimitDescriptors = new ushort[16];
///
/// Storage info
///
public StorageInfo StorageInfo = new();
///
/// Service access control
///
/// 32 entries
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
public ulong[] ServiceAccessControl = new ulong[32];
///
/// Extended service access control, support for this was implemented with 9.3.0-X.
///
/// 2 entries
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
public ulong[] ExtendedServiceAccessControl = new ulong[2];
///
/// Reserved
///
/// 0x0F bytes
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x0F)]
public byte[] Reserved = new byte[0x0F];
///
/// Resource limit category. (0 = APPLICATION, 1 = SYS_APPLET, 2 = LIB_APPLET, 3 = OTHER (sysmodules running under the BASE memregion))
///
[MarshalAs(UnmanagedType.U1)]
public ResourceLimitCategory ResourceLimitCategory;
}
}