--- nono/lib/config.cpp 2026/04/29 17:05:26 1.1.1.15 +++ nono/lib/config.cpp 2026/04/29 17:05:35 1.1.1.17 @@ -55,6 +55,10 @@ Config::Config() // RAMDISK (--initrd) Add("exec-initrd", "", VMCap::VIRT68K); + // virt-m68k のブートパラメータ文字列。BootInfo の BI_COMMANDLINE で、 + // NetBSD/virt68k ではルートデバイスの決定に使っている。 + Add("exec-bootparam", "", VMCap::VIRT68K); + // X68030 の拡張メモリサイズ Add("extram-size", "0", VMCap::X68030); @@ -67,8 +71,8 @@ Config::Config() Add(string_format("fd%u-writeignore", id), 0, VMCap::X68030); } - // X68030 時の FPU の有無。 - Add("fpu-type", "68881", VMCap::X68030); + // 68030 の FPU の有無。 + Add("fpu-type", "68881", VMCap::VIRT68K | VMCap::X68030); // 高速モード。 Add("fast-mode", "0"); @@ -101,18 +105,27 @@ Config::Config() Add("hostnet0-afpacket-ifname", "auto"); Add("hostnet0-bpf-ifname", "auto"); Add("hostnet0-tap-devpath", "auto"); + Add("hostnet0-usermode-hostfwd",""); + Add("hostnet0-usermode-net", "10.8.0.0/24"); + Add("hostnet0-usermode-net6", "fd08::/64"); Add("hostnet1-driver", "none", VMCap::X68030); Add("hostnet1-fallback", 0, VMCap::X68030); Add("hostnet1-afpacket-ifname", "auto", VMCap::X68030); Add("hostnet1-bpf-ifname", "auto", VMCap::X68030); Add("hostnet1-tap-devpath", "auto", VMCap::X68030); + Add("hostnet1-usermode-hostfwd","", VMCap::X68030); + Add("hostnet1-usermode-net", "10.8.0.0/24", VMCap::X68030); + Add("hostnet1-usermode-net6", "fd08::/64", VMCap::X68030); AddAlias("hostnet-driver", "hostnet0-driver"); AddAlias("hostnet-fallback", "hostnet0-fallback"); AddAlias("hostnet-afpacket-ifname", "hostnet0-afpacket-ifname"); AddAlias("hostnet-bpf-ifname", "hostnet0-bpf-ifname"); AddAlias("hostnet-tap-devpath", "hostnet0-tap-devpath"); + AddAlias("hostnet-usermode-hostfwd","hostnet0-usermode-hostfwd"); + AddAlias("hostnet-usermode-net", "hostnet0-usermode-net"); + AddAlias("hostnet-usermode-net6", "hostnet0-usermode-net6"); // IPLROM1/2 ファイルパス。なければ内蔵 ROM。 Add("iplrom1-image", "", VMCap::X68030); @@ -157,6 +170,9 @@ Config::Config() // M88100 で疑似 STOP 状態をサポートする Add("mpu-pseudo-stop", 1, VMCap::M88K); + // MPU 種別。現状 m68k のみ。初期値は機種依存。 + Add("mpu-type", "", VMCap::M68K); + // Nereid Add("nereid0-enable", 0, VMCap::X68030); Add("nereid1-enable", 0, VMCap::X68030); @@ -230,6 +246,9 @@ Config::Config() // X68030 で FC2 ピンを切るか。 Add("x68k-cut-fc2", 1, VMCap::X68030); + + // XP プロセッサのクロック (MHz 単位の実数、小数点以下は3桁まで)。 + Add("xp-clock", "6.144", VMCap::LUNA); } // デストラクタ @@ -633,27 +652,21 @@ ConfigItem::TryDouble(double *val) const return true; } -// b ^ e -static inline int ipow(int b, int e) +// b を e 乗した整数を返す。 +static inline int +ipow(int b, int e) { int rv = 1; -#if 1 + for (int i = 0; i < e; i++) { rv *= b; } -#else - // e <= 3 とかだと上のほうが速そう。 - for (; e != 0; e >>= 1) { - if ((e & 1)) { - rv *= b; - } - b *= b; - } -#endif return rv; } // 値を固定小数点値として取得してみる。 +// digit は小数点以下の桁数で、それ以下は四捨五入する。 +// 値が "1.2345" で digit=3 なら *val = 1235 を返す。 bool ConfigItem::TryFixedDecimal(int *val, int digit) const {