4public sealed class NdsHeader
8 internal NdsHeader(ReadOnlyMemory<byte> rawData)
11 ReadOnlySpan<byte> data = rawData.Span;
12 Title = NdsBinary.ReadAscii(data, 0x00, 12);
13 GameCode = NdsBinary.ReadAscii(data, 0x0C, 4);
14 MakerCode = NdsBinary.ReadAscii(data, 0x10, 2);
15 Kind = ParseKind(data[0x12]);
35 SecureDisable = ((ulong)NdsBinary.ReadUInt32(data, 0x7C) << 32) | NdsBinary.ReadUInt32(data, 0x78);
39 HeaderCrc = NdsBinary.ReadUInt16(data, 0x15E);
50 public ReadOnlyMemory<byte>
RawData {
get; }
151 private static NdsImageKind ParseKind(
byte value) => value
switch
156 _ =>
throw new InvalidDataException($
"Unsupported Nintendo DS unit code 0x{value:X2}."),
164 private static NdsProgram ReadProgram(ReadOnlySpan<byte> data,
NdsProcessor processor,
int offset) =>
167 NdsRegion.FromUInt32(NdsBinary.ReadUInt32(data, offset), NdsBinary.ReadUInt32(data, offset + 12)),
168 NdsBinary.ReadUInt32(data, offset + 4),
169 NdsBinary.ReadUInt32(data, offset + 8));
176 private static NdsProgram ReadDsiProgram(ReadOnlySpan<byte> data,
NdsProcessor processor,
int offset)
178 uint loadAddress = NdsBinary.ReadUInt32(data, offset + 8);
181 NdsRegion.FromUInt32(NdsBinary.ReadUInt32(data, offset), NdsBinary.ReadUInt32(data, offset + 12)),
190 private static NdsRegion ReadRegion(ReadOnlySpan<byte> data,
int offset) =>
191 NdsRegion.FromUInt32(NdsBinary.ReadUInt32(data, offset), NdsBinary.ReadUInt32(data, offset + 4));