--- nono/lib/mainapp.h 2026/04/29 17:05:22 1.1.1.14 +++ nono/lib/mainapp.h 2026/04/29 17:05:48 1.1.1.18 @@ -15,6 +15,7 @@ class Config; class Logger; class MonitorManager; +class UIMessage; class VM; // VM 種別 @@ -51,6 +52,13 @@ class MainApp // Init() の戻り値 static const int PASS = -1; // 実行を継続 + enum class CPUAffinity { + None, // 指定なし + Low, // 低電力コアを列挙 + High, // 高性能コアを列挙 + Perf, // 高性能コアを列挙 (パフォーマンス測定用) + }; + public: MainApp(); ~MainApp(); @@ -58,7 +66,7 @@ class MainApp void Dispose(); // 初期化 (ステージ1) - int Init1(bool is_cli_, int ac, char *av[]); + int Init1(int ac, char *av[], std::string (*conv)(const std::string&)); // 初期化 (ステージ2) bool Init2(); @@ -105,22 +113,22 @@ class MainApp const std::vector& GetObjects() const { return objects; } // 指定のオブジェクトを返す。こっちは、なければ NULL を返す。 - Object *FindObject(int id) const; + Object *FindObject(uint id) const; // 指定のオブジェクトを返す。こっちは、なければ assert する。 - Object *GetObject(int id) const; + Object *GetObject(uint id) const; // 指定のオブジェクトを型 T* にキャストして返す。 // オブジェクトがないかキャストできなければ NULL を返す。 template - T *FindObject(int id) const { + T *FindObject(uint id) const { return dynamic_cast(FindObject(id)); } // 指定のオブジェクトを型 T* にキャストして返す。 // オブジェクトがないかキャストできなければ assert する。 template - T *GetObject(int id) const { + T *GetObject(uint id) const { auto dev = FindObject(id); assert(dev); return dev; @@ -135,16 +143,29 @@ class MainApp // Logger を返す Logger *GetLogger() const { return logger.get(); } + // UIMessage を返す + UIMessage *GetUIMessage() const { return uimessage.get(); } + public: - // -B: ベンチマークモード - int benchmark_mode {}; + // CLI/GUI 区別 + bool IsCLI() const { return is_cli; } + bool IsGUI() const { return !is_cli; } - // -b: ブレークポイント "[,][,]" + // -b(--b): ブレークポイント "[,][,]" std::vector debug_breakaddr {}; + // --bi: 命令ブレークポイント "[,][:][,]" + std::vector debug_breakinst {}; + + // --bv: ベクタブレークポイント "[,][-][,]" + std::vector debug_breakvec {}; + // --bi-exg (とりあえず) bool debug_breakinst_exg {}; + // --console-log: コンソールデバイスの出力ログ。 + const char *console_logfile {}; + // -d: 起動時にデバッガで停止 bool debug_on_start {}; @@ -167,15 +188,34 @@ class MainApp // AVX2 をホストがサポートしているかどうか。(こっちは情報表示用) bool detect_avx2 {}; + // NEON を使うかどうか。ホスト CPU 調査の設定ファイル反映後の値。 + bool enable_neon {}; + + // NEON をホストがサポートしているかどうか。(こっちは情報表示用) + bool detect_neon {}; + + // CPU コアのアフィニティ。 + CPUAffinity cpu_affinity {}; + + // 要素数がコア数。true のところが cpu_affinity で指定した性質のコアを示す。 + std::vector cpu_list {}; + + // ログ表示用 + std::unique_ptr hostcpu /*{}*/; + private: // 初期化ステージ1 の下請け。 - int Init1a(int, char *[]); + int Init1a(int, char *[], std::string (*conv)(const std::string&)); int Init1b(); + // path を絶対パスにして返す。 + // 相対パスならカレントディレクトリからのパスとする。 + static std::string AbsPath(const char *path); + // path を正規化して返す (下請け)。 // path が相対パスなら basedir を起点とする。 - std::string NormalizePath(const std::string& path, - const std::string& basedir) const; + static std::string NormalizePath(const std::string& path, + const std::string& basedir); // ヘルプメッセージを表示する void ShowHelp(bool all) const; @@ -189,6 +229,9 @@ class MainApp // CPU の機能をチェックする。 bool CheckCPU(); + // CPU 番号リスト文字列を処理する。 + std::string ParseCPUList(std::vector& dst, const std::string& input); + // opt を logopt に追加する (-L オプション用) void AddLogopt(const char *opt); @@ -198,20 +241,18 @@ class MainApp // ログレベル1つを設定する。 static bool SetLogopt1(const std::string&, std::string *errmsg); - // 初回起動時用に SRAM.DAT を作成する。 - int CreateSRAM(); - // コンパイルされている host netdriver の一覧を表示 void ShowHostnet() const; // CLI/GUI 区別 - bool IsCLI() const { return is_cli; } - bool IsGUI() const { return !is_cli; } bool is_cli {}; // ログ std::unique_ptr logger /*{}*/; + // UIMessage + std::unique_ptr uimessage /*{}*/; + // 全オブジェクトへのポインタのリスト (所有はしていない) std::vector objects {}; @@ -243,9 +284,6 @@ class MainApp // -V: パラメータ指定 std::vector> config_options {}; - - // --create-sram オプション - bool create_sram {}; }; // グローバルインスタンス