void AddTreeNode(Hashtable index, GameSettings gs, string key, params string[] titlebits)
 {
     TreeNode tn = new TreeNode(BuildTitle(titlebits), 2, 2);
     tn.Tag = gs;
     if (key == null || !index.ContainsKey(key))
     {
         key = "Other";
     }
     ((TreeNode)index[key]).Nodes.Add(tn);
 }
Ejemplo n.º 2
0
        public static Machine New(GameSettings gs, Cart c, InputAdapter ia)
        {
            if (gs == null)
            {
                throw new ArgumentNullException("gs");
            }
            if (c == null)
            {
                throw new ArgumentNullException("c");
            }
            if (ia == null)
            {
                throw new ArgumentNullException("ia");
            }

            Machine m;

            switch (gs.MachineType)
            {
                case MachineType.A2600NTSC:
                    m = new Machine2600NTSC(c, ia);
                    break;
                case MachineType.A2600PAL:
                    m = new Machine2600PAL(c, ia);
                    break;
                case MachineType.A7800NTSC:
                    m = new Machine7800NTSC(c, ia);
                    break;
                case MachineType.A7800PAL:
                    m = new Machine7800PAL(c, ia);
                    break;
                default:
                    throw new Exception("Unexpected machine type: " + gs.MachineType.ToString());
            }

            m.InputAdapter.Controllers[0] = gs.LController;
            m.InputAdapter.Controllers[1] = gs.RController;

            return m;
        }
Ejemplo n.º 3
0
        public static Cart New(GameSettings gs)
        {
            BinaryReader rom = new BinaryReader(File.OpenRead(gs.FileInfo.FullName));
            rom.BaseStream.Seek(gs.Offset, SeekOrigin.Begin);

            if (gs.CartType == CartType.Default)
            {
                FileInfo fi = new FileInfo(gs.FileInfo.FullName);
                switch (gs.MachineType)
                {
                    case MachineType.A2600NTSC:
                    case MachineType.A2600PAL:
                        switch (fi.Length - gs.Offset)
                        {
                            case 2048:  gs.CartType = CartType.A2K;  break;
                            case 4096:  gs.CartType = CartType.A4K;  break;
                            case 8192:  gs.CartType = CartType.A8K;  break;
                            case 16384: gs.CartType = CartType.A16K; break;
                            default:
                                throw new Exception("Unexpected CartType: " + gs.CartType.ToString());
                        }
                        break;
                    case MachineType.A7800NTSC:
                    case MachineType.A7800PAL:
                        switch (fi.Length - gs.Offset)
                        {
                            case 8192:  gs.CartType = CartType.A7808; break;
                            case 16384: gs.CartType = CartType.A7816; break;
                            case 32768: gs.CartType = CartType.A7832; break;
                            case 49152: gs.CartType = CartType.A7848; break;
                            default:
                                throw new Exception("Unexpected CartType: " + gs.CartType.ToString());
                        }
                        break;
                }
            }

            return Cart.New(rom, gs.CartType);
        }
Ejemplo n.º 4
0
 public void RunMachine(GameSettings gs, InputAdapter ia)
 {
     if (ia == null)
     {
         ia = new InputAdapter();
     }
     M = Machine.New(gs, Cart.New(gs), ia);
     M.Reset();
     RunMachine();
     M.Done();
 }
 public GameSettings GetGameSettings(string md5)
 {
     if (md5 == null)
     {
         throw new ArgumentNullException("md5");
     }
     if (PropertyTable == null)
     {
         Load();
     }
     if (!PropertyTable.ContainsKey(md5))
     {
         PropertyTable[md5] = new GameSettings(md5);
     }
     return (GameSettings)PropertyTable[md5];
 }
        public void Load()
        {
            string fn = Path.Combine(EMU7800App.Instance.Settings.RootDirectory, ROM_PROPERTIES_FN);

            Trace.Write("Loading ");
            Trace.Write(fn);
            Trace.Write("... ");

            PropertyTable = new Hashtable();
            StreamReader r = null;
            try
            {
                r = new StreamReader(fn);
            }
            catch (Exception ex)
            {
                if (r != null)
                {
                    r.Close();
                }
                Trace.WriteLine("error");
                Trace.WriteLine(ex.Message);
                return;
            }

            string line = r.ReadLine();

            Hashtable Column = new Hashtable();
            int colno = 0;
            int colMD5 = 0;
            int colTitle = 0;
            int colManufacturer = 0;
            int colYear = 0;
            int colModelNo = 0;
            int colRarity = 0;
            int colCartType = 0;
            int colMachineType = 0;
            int colLController = 0;
            int colRController = 0;
            int colHelpUri = 0;
            foreach (string colnm in line.Split(','))
            {
                switch (colnm)
                {
                    case "MD5": colMD5 = colno; break;
                    case "Title": colTitle = colno; break;
                    case "Manufacturer": colManufacturer = colno; break;
                    case "Year": colYear = colno; break;
                    case "ModelNo": colModelNo = colno; break;
                    case "Rarity": colRarity = colno; break;
                    case "CartType": colCartType = colno; break;
                    case "MachineType": colMachineType = colno; break;
                    case "LController": colLController = colno; break;
                    case "RController": colRController = colno; break;
                    case "HelpUri": colHelpUri = colno; break;
                }
                colno++;
            }

            if (colno != 11)
            {
                Trace.WriteLine("bad ROMProperties.csv file: not all columns present");
                return;
            }

            string md5;

            while (true)
            {
                line = r.ReadLine();
                if (line == null)
                {
                    break;
                }

                string[] row = line.Split(',');
                md5 = row[colMD5];

                GameSettings gs = new GameSettings(md5);
                gs.Title = row[colTitle];
                gs.Manufacturer = row[colManufacturer];
                gs.Year = row[colYear];
                gs.ModelNo = row[colModelNo];
                gs.Rarity = row[colRarity];

                gs.CartType = EnumCartType(row[colCartType], ref md5);
                gs.MachineType = EnumMachineType(row[colMachineType], ref md5);

                Controller dflt;
                switch (gs.MachineType)
                {
                    default:
                    case MachineType.A2600NTSC:
                    case MachineType.A2600PAL:
                        dflt = Controller.Joystick;
                        break;
                    case MachineType.A7800NTSC:
                    case MachineType.A7800PAL:
                        dflt = Controller.ProLineJoystick;
                        break;
                }
                gs.LController = EnumController(row[colLController], dflt, ref md5);
                gs.RController = EnumController(row[colRController], dflt, ref md5);

                if (colHelpUri < row.Length && row[colHelpUri].Trim().Length > 0)
                {
                    gs.HelpUri = row[colHelpUri].Trim();
                }

                gs.FileInfo = null;

                PropertyTable[md5] = gs;
            }
            r.Close();
            Trace.Write(PropertyTable.Count);
            Trace.Write(" ");
            Trace.Write(ROM_PROPERTIES_FN);
            Trace.WriteLine(" entries loaded");
        }