コード例 #1
0
        public static void ParseNstDatabase(string nstDatabasePath)
        {
            var serializer = new XmlSerializer(typeof(NstDatabase.database));

            NstDatabase.database database = (NstDatabase.database)serializer.Deserialize(new StreamReader(nstDatabasePath));

            foreach (var entry in database.game)
            {
                var newEntry = new NESDatabaseEntry();
            }
        }
コード例 #2
0
        public static void ParseNesCartsDatabase(string nesCartsPath)
        {
            var serializer = new XmlSerializer(typeof(NesCartDB.database));

            NesCartDB.database database = (NesCartDB.database)serializer.Deserialize(new StreamReader(nesCartsPath));

            foreach (var entry in database.game)
            {
                var newEntry = new NESDatabaseEntry
                {
                    Name        = entry.name,
                    AltName     = entry.altname,
                    PlayerCount = entry.players,
                    Developer   = entry.developer,
                    Publisher   = entry.publisher,
                };

                if (DateTime.TryParse(entry.date, out DateTime date))
                {
                    newEntry.PublishDate = DateTime.Parse(entry.date);
                }

                var cartridge = entry.cartridge.First();
                newEntry.CRC        = cartridge.crc;
                newEntry.IsGoodDump = cartridge.dump == "ok";

                if (Enum.TryParse(cartridge.system.Replace("-", "").Replace("NES", ""), out NESSystemType system))
                {
                    newEntry.System = system;
                }
                else
                {
                    newEntry.System = NESSystemType.UNKNOWN;
                }

                if (Enum.TryParse(cartridge.board.mapper.ToString(), out MemoryMapperIds mapperId))
                {
                    newEntry.MapperId = mapperId;
                }
                else
                {
                    newEntry.MapperId = MemoryMapperIds.UNKNOWN;
                }

                foreach (var board in cartridge.board.Items)
                {
                    switch (board)
                    {
                    case DatabaseGameCartridgeBoardPrg prg:
                        newEntry.ProgramROMSize = (int)ByteSize.FromKibiBytes(double.Parse(prg.size.Replace("k", ""))).Bytes;
                        break;

                    case DatabaseGameCartridgeBoardVram vram:
                        newEntry.VideoRAMSize = (int)ByteSize.FromKibiBytes(double.Parse(vram.size.Replace("k", ""))).Bytes;
                        break;

                    case DatabaseGameCartridgeBoardWram wram:
                        newEntry.WritableRAMSize = (int)ByteSize.FromKibiBytes(double.Parse(wram.size.Replace("k", ""))).Bytes;
                        newEntry.HasBattery      = wram.battery == 1 ? true : false;
                        break;

                    case DatabaseGameCartridgeBoardChr chr:
                        newEntry.CharacterRomSize = (int)ByteSize.FromKibiBytes(double.Parse(chr.size.Replace("k", ""))).Bytes;
                        break;

                    case DatabaseGameCartridgeBoardChip chip:
                        break;

                    case DatabaseGameCartridgeBoardCic cic:
                    case DatabaseGameCartridgeBoardPad pad:
                        break;

                    default:
                        throw new InvalidOperationException();
                    }
                }

                if (!NESDatabase.entries.ContainsKey(newEntry.CRC))
                {
                    NESDatabase.entries.Add(newEntry.CRC, newEntry);
                }
            }
        }