|
|
1.1 root 1: //
2: // nono
3: // Copyright (C) 2018 [email protected]
4: //
5:
6: #pragma once
7:
8: #include "configfile.h"
9: #include "debugger.h"
10: #include "logger.h"
11: #include "scheduler.h"
12: #include "vm.h"
13:
14: extern bool console_log;
15: extern bool fast_mode;
16: extern char logopt[256];
17: extern const char *human68k_file;
18: extern char human68k_arg[256];
19:
20: extern std::string vmdir;
21:
22: extern bool parse_logopt(const char *arg, u_int vmtype);
23:
24: // 起動時の処理 は CLI と GUI でよく似ているので共通化する。
25: // ただし地味に異なるところがあるのでテンプレートでコンパイル時処理。
26: // log_to_stdout はログをコンソールに(も)出力するなら true。
27: template<bool is_cli> bool
28: main_init(bool log_to_stdout)
29: {
30: // ログ機構は引数処理後なるはや
31: logger_init();
32: gLogger->UseStdout(log_to_stdout);
33:
34: // 引数で指定されたディレクトリの設定ファイルを読む
35: gConfig = new Config(vmdir);
36: if (!gConfig->Load()) {
37: return false;
38: }
39:
40: // VM 種別を決定
41: u_int vm_type;
42: if (is_cli && human68k_file) {
43: vm_type = VM::TYPE_RXZ;
44: } else {
45: vm_type = gConfig->ReadInt("vm_type");
46: }
47:
48: // VM 作成
49: if (vm_type == VM::TYPE_X68030) {
50: gVM = new VM_X68030();
51:
52: } else if (vm_type == VM::TYPE_LUNA) {
53: gVM = new VM_LUNA();
54:
55: } else if (vm_type == VM::TYPE_RXZ && is_cli) {
56: gVM = new VM_RXZ(human68k_file, human68k_arg);
57:
58: } else {
59: warnx("%s: invalid vm_type %d",
60: gConfig->GetFilename().c_str(), vm_type);
61: return false;
62: }
63:
64: // 動的なコンストラクション
65: if (!gVM->Create()) {
66: return false;
67: }
68:
69: // ログレベルを設定。コンストラクト後すぐに行う。
70: // -L help もここで処理。
71: if (!parse_logopt(logopt, vm_type)) {
72: return false;
73: }
74:
75: // VM 初期化
76: // (デバッガは VM オブジェクトリストに入っていない)
77: if (!gVM->Init()) {
78: return false;
79: }
80: debugger_init();
81:
82: // 起動時設定の適用
83: if (!gVM->Apply()) {
84: return false;
85: }
86:
87: // ここで引数を VM に適用?
88: // XXX これは設定ファイルのオーバーライド方向にするべき
89: gScheduler->SetFullSpeed(fast_mode);
90:
91: return true;
92: }
93:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.