Пример #1
0
        //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);
        }
Пример #2
0
        //仮想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);
        }
Пример #3
0
        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();
        }
Пример #4
0
        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();
        }