public SfromHeader2(uint romSize, ushort presetId, SnesRomType romType, byte chip) { FPS = 60; RomSize = romSize; PcmSize = 0; FooterSize = 0; PresetID = presetId; MaxControllers = 2; Volume = 0x5A; RomType = (byte)romType; Chip = chip; Padding1 = new byte[5]; Unknown3 = 0x00000001; Unknown4 = 0x00000001; Padding2 = new byte[13]; }
public SfromHeader2(uint romSize, ushort presetId, SnesRomType romType, uint chip) { FPS = 60; RomSize = romSize; PcmSize = 0; FooterSize = 0; PresetID = presetId; Mostly2 = 2; Volume = 100; RomType = (byte)romType; Chip = chip; Unknown1_0x00000000 = 0x00000000; Unknown2_0x00000100 = 0x00000100; Unknown3_0x00000100 = 0x00000100; Unknown4_0x00000000 = 0x00000000; }
public static SnesRomHeader GetCorrectHeader(byte[] rawRomData, out SnesRomType romType, out string gameTitle) { var romHeaderLoRom = SnesRomHeader.Read(rawRomData, 0x7FC0); var romHeaderHiRom = SnesRomHeader.Read(rawRomData, 0xFFC0); var titleLo = romHeaderLoRom.GameTitle; var titleHi = romHeaderHiRom.GameTitle; // Boring LoRom/HiRom detection... if (((romHeaderLoRom.Checksum ^ 0xFFFF) == romHeaderLoRom.ChecksumComplement) && ((romHeaderHiRom.Checksum ^ 0xFFFF) != romHeaderHiRom.ChecksumComplement || romHeaderHiRom.Checksum == 0 || romHeaderHiRom.ChecksumComplement == 0)) { romType = SnesRomType.LoRom; } else if (((romHeaderLoRom.Checksum ^ 0xFFFF) != romHeaderLoRom.ChecksumComplement || romHeaderLoRom.Checksum == 0 || romHeaderLoRom.ChecksumComplement == 0) && ((romHeaderHiRom.Checksum ^ 0xFFFF) == romHeaderHiRom.ChecksumComplement)) { romType = SnesRomType.HiRom; } else if (titleLo.Length != 0 && titleHi.Length == 0) { romType = SnesRomType.LoRom; } else if (titleLo.Length == 0 && titleHi.Length != 0) { romType = SnesRomType.HiRom; } else if ((titleLo == titleHi) && ((romHeaderLoRom.RomMakeup & 1) == 0)) { romType = SnesRomType.LoRom; } else if ((titleLo == titleHi) && ((romHeaderHiRom.RomMakeup & 1) == 1)) { romType = SnesRomType.HiRom; } else if (gamesLoRom.Contains(titleLo)) { romType = SnesRomType.LoRom; } else if (gamesHiRom.Contains(titleHi)) { romType = SnesRomType.HiRom; } else { bool loRom = true; bool hiRom = true; foreach (char c in titleLo) { if (c < 31 || c > 127) { loRom = false; } } foreach (char c in titleHi) { if (c < 31 || c > 127) { hiRom = false; } } if (loRom && !hiRom) { romType = SnesRomType.LoRom; } else if (!loRom && hiRom) { romType = SnesRomType.HiRom; } else { Trace.WriteLine("Can't detect ROM type"); throw new Exception("can't detect ROM type, seems like ROM is corrupted"); } } SnesRomHeader romHeader; if (romType == SnesRomType.LoRom) { romHeader = romHeaderLoRom; gameTitle = titleLo; } else { romHeader = romHeaderHiRom; gameTitle = titleHi; } return(romHeader); }