--- nono/lib/config.cpp 2026/04/29 17:04:34 1.1.1.2 +++ nono/lib/config.cpp 2026/04/29 17:05:01 1.1.1.9 @@ -25,27 +25,82 @@ Config::Config() // 以下概ねアルファベット順に並べる - // デバッガの TCP 待ち受けポート - Add("debugger-port", 9999); - Add("ethernet-hostdriver", "none"); + // VM 内の時計を同期する時間軸。 + // [ real, virtual ] + Add("clock-sync", "real"); + + // デバッガの TCP 待ち受けポート + Add("debugger-port", 0); + + // MAC アドレス Add("ethernet-macaddr", "auto"); - // LUNA の DIPSW (1 が UP、0 が DOWN) - Add("luna-dipsw1", "11110111"); - Add("luna-dipsw2", "11111111"); - // MPU クロック (MHz 単位の実数、小数点以下は3桁まで)。 - // 各 VM クラスで初期値を設定している。 + + // キーボードの入力モード + Add("hostkbd-input", "char"); + + // ネットワークのホスト側設定。 + Add("hostnet-driver", "auto"); + Add("hostnet-fallback", 0); + Add("hostnet-afpacket-ifname", "auto"); + Add("hostnet-bpf-ifname", "auto"); + Add("hostnet-tap-devpath", "auto"); + + // LUNA の DIPSW (1 が UP、0 が DOWN) + // 初期値は機種によって異なるため pio.cpp で設定している。 + Add("luna-dipsw1"); + Add("luna-dipsw2"); + + // LUNA の RTC(MK48T02) がうるう年でない 1970 をエポックとして + // 設定しているので、そちらに合わせてうるう年を補正する + Add("luna-adjust-misused-epoch", 1); + + // m88100 の別名ニーモニックを併記する。 + Add(".m88k-altname", 0); + + // モニタウィンドウの更新頻度 [Hz] + Add("monitor-rate", 20); + + // MPU クロック (MHz 単位の実数、小数点以下は3桁まで)。 + // 初期値は各 VM クラスで設定している。 Add("mpu-clock"); + + // X68030 時の FPU の有無。 + // LUNA-I では VM 初期化時に削除する。 Add("mpu-has-fpu", 0); - // PROM ファイルパス。なければ内蔵 ROM 起動。 + + // M88100 で疑似 STOP 状態をサポートする + Add("mpu-pseudo-stop", 1); + + // PROM ファイルパス。なければ内蔵 ROM 起動。 Add("prom-image", ""); + + // PROM のデバッグオプション。 + // PROM 中の SCSI デバッグビットを立てる。 Add(".prom-scsi-debug", 0); - // RAM サイズ (MB 単位の整数)。 - // 各 VM クラスで初期値を設定している。 + + // RAM サイズ (MB 単位の整数)。 + // 初期値は機種ごとの VM クラスで設定している。 Add("ram-size", 0); + + // RTC のデバッグ用オプション。 Add(".rtc-force-fixed", 0); + Add(".rtc-date"); + Add(".rtc-time"); + + // ステータスパネルを表示する。 + Add("show-statuspanel", 1); + + // SCSI 設定。 for (int id = 0; id < 8; id++) { + // 種別とイメージパス Add(string_format("spc0-id%d-image", id)); + // エミュレータ的に書き込みを禁止するか + Add(string_format("spc0-id%d-writeignore", id), 0); + // エミュレータ的に書き込みを禁止するか + // (後方互換、十分不要になった頃に削除する) Add(string_format("spc0-id%d-writeprotect", id), 0); + // シークタイム [msec] + Add(string_format("spc0-id%d-seektime", id), 0); } } @@ -79,6 +134,21 @@ Config::Add(const std::string& key, cons return true; } +// 項目を削除 +// key が見付からなくても何もしない。key は複数登録されていることはないはず。 +void +Config::Delete(const std::string& key) +{ + for (auto it = list.begin(); it != list.end(); ++it) { + auto item = *it; + if (key == item.key) { + list.erase(it); + return; + } + } + assert(FindItem(key) == NULL); +} + // 設定ファイルの内容で上書きする bool Config::Update(const ConfigFile& file) @@ -168,10 +238,8 @@ Config::SplitKeyVal(std::string *keyp, s auto key = line.substr(0, pos++); auto val = line.substr(pos, line.size() - pos); - string_rtrim(key); - string_rtrim(val); - *keyp = string_ltrim(key); - *valp = string_ltrim(val); + *keyp = string_trim(key); + *valp = string_trim(val); return true; }