//ROMを開く. public static bool LoadROM(string fullfilename, string forceversion) { //キャッシュスレッドが動いていたら止める if (AsmMapFileAsmCache != null) { AsmMapFileAsmCache.Join(); } //必ず絶対パスに直します. 相対パスがあると後で参照するときに都合が悪い. fullfilename = Path.GetFullPath(fullfilename); if (!File.Exists(fullfilename)) { return(false); } //最後に利用したファイルを記録する機能を初期化. 何度もリテイクするだろうからしやすいようにする. LastSelectedFilename = new LastSelectedFilename(fullfilename); try { bool r = LoadROMLow(fullfilename, forceversion); if (!r) { return(false); } } catch (Exception e) { R.ShowStopError(R.ExceptionToString(e)); return(false); } InitSystem(fullfilename); return(true); }
//仮想ROMを開く. public static bool LoadVirtualROM(ROM rom, string srcfilename) { //キャッシュスレッドが動いていたら止める if (AsmMapFileAsmCache != null) { AsmMapFileAsmCache.Join(); } //最後に利用したファイルを記録する機能を初期化. 何度もリテイクするだろうからしやすいようにする. LastSelectedFilename = new LastSelectedFilename(srcfilename); ROM = rom; rom.SetVirtualROMFlag(srcfilename); InitSystem(""); return(true); }
public static void ReLoadSetting() { if (Program.ROM == null) {//ROMを読込んでいない場合は、システムの初期化だけ行う //システム側のテキストエンコード いかにしてUnicodeにするかどうか. ReBuildSystemTextEncoder(); //多言語切り替え ReLoadTranslateResource(); return; } if (AsmMapFileAsmCache != null) { //探索スレッドが動いているとまずいので停止させる. AsmMapFileAsmCache.Join(); } //件数キャッシュの再構築 InputFormRef.ClearCacheDataCount(); //システム側のテキストエンコード いかにしてUnicodeにするかどうか. ReBuildSystemTextEncoder(); //多言語切り替え ReLoadTranslateResource(); //FEテキストエンコード用のハフマンツリーマップの構成 ReBuildFETextEncoder(); //イベントの読込 ReLoadEventScript(); //MODの読込. ReLoadMod(); //ASMMapの再構築 //以前のデータが残っているとまずいので完全に捨てて再作成します. AsmMapFileAsmCache = new FEBuilderGBA.AsmMapFileAsmCache(); //asm mapキャッシュの更新. AsmMapFileAsmCache.ClearCache(); }
static void Main(string[] args) { //オプション引数 --mode=foo とかを、dic["--mode"]="foo" みたいに変換します. ArgsDic = U.OptionMap(args, "--rom"); //メインスレッド判定に利用するためにスレッドIDを保存 MainThreadID = System.Threading.Thread.CurrentThread.ManagedThreadId; #if !DEBUG SetExceptionHandler(); #endif Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); //自プロセスのパスから、ベースディレクトリを特定します. Program.BaseDirectory = MakeBaseDirectory(); Log.TouchLogDirectory(); //設定の読み込み Config = new Config(); Config.Load(System.IO.Path.Combine(BaseDirectory, "config", "config.xml")); Config.UpdateShortcutKeys(); //システム側のテキストエンコード いかにしてUnicodeにするかどうか. ReBuildSystemTextEncoder(); //多言語切り替え ReLoadTranslateResource(); //外部プロセスからの書き換え監視等の開始 UpdateWatcher = new ROMUpdateWatcher(); string forceversion = U.at(ArgsDic, "--force-version");//強制バージョン指定 --force-version=FE8J if (ArgsDic.ContainsKey("--lastrom")) { MainFormUtil.Open(null, Program.GetLastROMFilename(), false, forceversion); } if (ArgsDic.ContainsKey("--rom")) { MainFormUtil.Open(null, ArgsDic["--rom"], false, forceversion); } { //自動アップデートがやりたいので、初期化だけはやろうか... WelcomeForm f = (WelcomeForm)InputFormRef.JumpFormLow <WelcomeForm>(); if (Program.ROM == null) {//ROMが読み込めない場合、welcomeダイアログを出す. WelcomeForm.CheckInitWizard(); f.ShowDialog(); if (Program.ROM == null) {//それでもROMが読み込めない場合、終了. return; } } } //コマンドラインの処理があれば。 if (ProcCommandLine()) {//コマンドラインを実行できたので、即終了 return; } //メインフォームを開く. do { Program.DoReOpen = false; Form f = MainForm(); MainFormUtil.SetMainFormIcon(f); Application.Run(f); }while (Program.DoReOpen); //メインフォームを作り直すためループにする. //キャッシュスレッドが動いていたら止める if (AsmMapFileAsmCache != null) { AsmMapFileAsmCache.Join(); } //ログの書き込み Log.SyncLog(); }