Exemple #1
0
 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];
 }
Exemple #2
0
 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;
 }
Exemple #3
0
        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);
        }