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); }
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; }
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); }
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"); }