-VM の設定ファイルはその VM ディレクトリ内の nono.cfg です。
+VM の設定ファイルはその VM ディレクトリ内の nono.cfg
+(または -c で指定したファイル) です。
書式は
string", <<<_EOM_
-VM 種別を指定します。今の所 string に
-指定できるのは luna (LUNA-I) だけですが、省略不可です。
+VM 種別を以下のいずれかから指定します。
+省略不可です。
+Specifies the VM type from the following.
+This field is mandatory.
+
+| | luna | … LUNA-I
+ |
| luna88k | … LUNA88K
+ |
_EOM_
);
-config_item("debugger-port = integer", <<<_EOM_
-デバッガの TCP 待ち受けポート番号を指定します。
-0 なら待ち受けを行いません。
-デフォルトは 9999 です(適当)。
+config_item("clock-sync = value", <<<_EOM_
+仮想マシン内の時刻の同期方法を指定します。
+real なら実時間に同期、virtual なら仮想時間に同期します。
+デフォルトは real です。
+この機能は実験中のため将来予告なく仕様が変更になる可能性があります。
+Specify how to synchronize the time in virtual machine.
+If real, synchronize with the real time;
+if virtual, synchronize with the virtual time.
+The default is real.
+This feature is under experimentation and may be changed in the future
+without notice.
_EOM_
);
-config_item("ethernet-hostdriver = string", <<<_EOM_
-イーサネットデバイスのホスト側ドライバを指定します。
-none、tap、bpf が指定できます。
-none ならホスト側とは一切通信を行いません。
-tap か bpf かはホスト OS によってビルド時に決定します。
-NetBSD なら tap です。
+config_item("debugger-port = integer", <<<_EOM_
+デバッガの TCP 待ち受けポート番号を指定します。
+0 なら待ち受けを行いません。
+デフォルトは 0 です。
+Specifies the TCP port number that debugger listens.
+If 0, it will not listen.
+The default is 0.
_EOM_
);
@@ -281,15 +372,177 @@ config_item("ethernet-macaddr = strin
_EOM_
);
+config_item("hostkbd-input = string", <<<_EOM_
+ホストキーボードの入力モードを指定します。
+char ならキャラクタ入力モード、
+jp なら日本語キーボードモードです。
+デフォルトは char です。
+詳細は VM について の章を参照してください。
+Specifies the input mode of the host keyboard.
+char means the character mode,
+jp means the Japanese keyboard mode.
+The defualt is char.
+See About VM for details.
+_EOM_
+);
+
+config_item("hostnet-driver = string", <<<_EOM_
+イーサネットデバイスのホスト側ドライバを指定します。
+afpacket、bpf、tap のうち
+ホスト OS がサポートしているものと auto、none が選択可能です。
+afpacket は Linux の AF_PACKET ソケットを使用します。
+bpf は bpf(4) デバイスを使用します。
+tap は tap(4) インタフェースを使用します。
+none ならホスト側とは一切通信を行いません。
+auto ならホスト OS がサポートしているもののうち
+tap → afpacket → bpf を順に試します。
+デフォルトは auto です。
+Specifies the host driver of ethernet device.
+afpacket, bpf, and tap can be specified
+only if the host OS supports them.
+auto and none can always be specified.
+afpacket uses Linux's AF_PACKET socket,
+bpf uses bpf(4) device,
+and tap uses tap(4) interface.
+none doesn't make any communication with the host.
+If auto is specified,
+it tries tap, afpacket, and bpf in that order
+(if the host OS supports them).
+The default is auto.
+_EOM_
+);
+
+config_item("hostdriver-afpacket-ifname = ifname", <<<_EOM_
+ホストドライバが afpacket の時にバインドするインタフェースを1つ指定します。
+ifname が auto
+なら使用可能なインタフェースを1つ自動的に選択します。
+デフォルトは auto です。
+なお、このホストドライバではローカルホストとの通信は出来ません。
+Specify an interface name to bind to, when the host driver is afpacket.
+If auto is specified as ifname,
+it selects an usable interface automatically.
+The default is auto.
+Note that this host driver cannot communicate with the localhost.
+_EOM_
+);
+
+config_item("hostdriver-bpf-ifname = ifname", <<<_EOM_
+ホストドライバが bpf の時にバインドするインタフェースを1つ指定します。
+ifname が auto
+なら使用可能なインタフェースを1つ自動的に選択します。
+デフォルトは auto です。
+なお、このホストドライバではローカルホストとの通信は出来ません。
+Specify an interface name to bind to, when the host driver is bpf.
+If auto is specified as ifname,
+it selects an usable interface automatically.
+The default is auto.
+Note that this host driver cannot communicate with the localhost.
+_EOM_
+);
+
+config_item("hostdriver-tap-devpath = path", <<<_EOM_
+ホストドライバが tap の時に使用するデバイスを1つフルパスで指定します。
+デフォルトは auto で、この場合は自動的にデバイスを選択します。
+この時の探し方はホスト OS によって異なります。
+Linux なら /dev/net/tun を指定したのと同じです。
+OpenBSD なら /dev/tap0 から /dev/tap9 まで
+順番にオープンできるまで試します。
+NetBSD (と FreeBSD) ならまず /dev/tap でクローニングを試み、
+それが失敗すれば /dev/tap0 から /dev/tap9 までを
+順番にオープンできるまで試します。
+いずれの場合も VM ディレクトリかその親ディレクトリに
+nono-ifup, nono-ifdown という名前のシェルスクリプトが必要です。
+何もすることがない場合でも正常終了する空のシェルスクリプトを用意してください。
+
+Specify a device pathname, when the host driver is tap.
+The default is auto.
+The behavior in this case depends on the host OS.
+On Linux, it's the same as /dev/net/tun.
+On OpenBSD, it will try from /dev/tap0 to /dev/tap9
+until successful.
+On NetBSD (and FreeBSD), it will try cloning by /dev/tap first.
+If that fails, then try from /dev/tap0 to /dev/tap9
+until successful.
+In all cases, you need to prepare two shell script files which names are
+nono-ifup and nono-ifdown in the VM directory or
+its parent directory.
+Even if you don't have anything to do in these scripts,
+you need to prepare empty scripts that will terminate successfully.
+_EOM_
+);
+
+config_item("hostnet-fallback = integer", <<<_EOM_
+hostnet-driver で指定したドライバが使用可能でなかった時、
+0 ならプロセスを終了します。
+1 なら none を選択して実行を継続します。
+デフォルトは 0 です。
+Specify the behavior when the driver which is selected by
+hostnet-driver is unusable;
+terminate the process if 0,
+or continue to run using the none driver if 1.
+The default is 0.
+_EOM_
+);
+
+config_item("luna-adjust-misused-epoch = integer", <<<_EOM_
+LUNA で誤った RTC epoch を採用している OS 向けに RTC
+エミュレーションを補正するかどうかを
+指定します。0 なら補正をしません(実機と同じ動作)、
+1 なら補正します(現実世界と同じ動作)。
+デフォルトは 1 で、通常 1 のままで使用して問題ありません。
+
+Specifies whether nono corrects RTC emulation for OSes
+that adopts wrong RTC epoch on LUNA.
+0 means making no correction
+(this is the same behavior as the actual machine).
+1 means making correction
+(this is the same behavior as the real world).
+The default is 1. Normally, leave it 1.
+
+LUNA で採用している RTC (MK48T02) は2桁で保持している年の値が
+4 で割り切れる年をうるう年とする仕様です。
+ところが NetBSD/luna68k、OpenBSD/luna88k など現存してソースが確認できる OS
+はいずれもこの RTC の年の値を 1970年からの経過年として使用しています
+(LUNA が本来どういう仕様だったのかは分かりませんが、
+異なる OS を起動し直すたびに RTC epoch をずらす運用は考えにくいので
+おそらくすべての OS で同じだと思います)。
+例えば1970年はうるう年ではないため 2月28日の翌日は 3月1日ですが、
+MK48T02 的には 00年であるためうるう年と認識し 2月28日の翌日が2月29日になります。
+このように、実機の RTC は4年のうち約2年間、1日ずれた日付を指しているようです。
+しかしながら、RTC の時刻は OS 起動時に一度読んだ後は基本的に参照しない上、
+今時必要なら NTP で時間を合わせるため、
+実機でも問題が顕在化することはまずないと思います。
+nono の場合は実機と異なり、アプリケーション実行中しか RTC が進まないため、
+補正がない場合の動作が問題になるのは
+nono を起動したまま偶数年の2月末日から日付をまたいで、
+かつ nono を起動したまま OS を再起動して NTP などで時刻修正を行わなかった時
+だけだと思います。
+このオプションはほぼ開発者向けの動作確認用です。
+_EOM_
+);
+
config_item("luna-dipsw1 = string", <<<_EOM_
本体前面 DIPSW#1-1..#1-8 の内容を指定します。
"0" を DOWN、"1" を UP として、
これを8つ並べた形式で、前から順に #1..#8 に対応します。
-デフォルトは 11110111 です。
+Specifies status of the front panel DIPSW#1-1..#1-8 using 8 digit.
+"0" means DOWN and "1" means UP.
+The first character corresponds to #1 and
+the eighth character corresponds to #8.
+
+LUNA-I でのデフォルトは 11110111 です。
+各スイッチの内容は以下のリンクを参照してください。
+On LUNA-I, the default value is 11110111.
+See the following link about DIPSW.
+→ NetBSD/luna68k: Information
-各スイッチの内容はここ
-(NetBSD/luna68k: Information) を参照してください。
+LUNA88K でのデフォルトは 11111111 です。
+各スイッチの内容は以下のリンクを参照してください。
+On LUNA88K, the default value is 11111111.
+See the following link about DIPSW.
+→ OpenBSD manual pages: boot_luna88k(8)
_EOM_
);
@@ -297,140 +550,1001 @@ config_item("luna-dipsw2 = string
本体前面 DIPSW#2-1..#2-8 の内容を指定します。
書式は luna-dipsw1 と同じです。
デフォルトは 11111111 です。
-
-すべて "1"(UP) なら
-NetBSD/luna68k のブートローダは自動的にカーネルをロードして実行し、
-どれかでも "0"(DOWN) にするとプロンプトで停止するようです。
+Specifies status of the front panel DIPSW#2-1..#2-8.
+The same syntax as luna-dipsw1 is used.
+The default value is 11111111.
+
+NetBSD/luna68k のブートローダは、
+DIPSW#2 が "11111111" なら自動的にカーネルをロードして実行し、
+どれかでも "0" にするとプロンプトで停止するようです。
(本当は #8 だけで制御するつもりだったんじゃないかという気がします)
+NetBSD/luna68k bootloader will automatically load and execute the kernel,
+if the DIPSW#2 is "11111111".
+Otherwise, the bootloader will enter interactive mode.
+(I doubt that they actually wanted to switch with only #8)
+
+_EOM_
+);
+
+config_item("monitor-rate = integer", <<<_EOM_
+テキスト系モニタウィンドウの更新頻度を Hz 単位で指定します。
+1 から 60 までの間で指定でき、デフォルトは 20Hz です。
+起動後にメニューからプリセットされた頻度には変更可能です。
+Specifies refresh rate of all text monitor windows in Hz.
+It ranges from 1 to 60. The default is 20Hz.
+You can change this value on GUI menu after boot,
+but unlike this configuration value, there are only a few preset choices.
_EOM_
);
config_item("mpu-clock = value", <<<_EOM_
MPU のクロック数を MHz 単位で指定します。
-デフォルトは 20MHz です。
+デフォルトは LUNA-I なら 20MHz、LUNA88K なら 25MHz です。
+Specifies the MPU clock in MHz.
+The default value is 20MHz on LUNA-I, or 25MHz on LUNA88K.
_EOM_
);
/* luna には不要
config_item("mpu-has-fpu", ""); */
-config_item("prom-use-rom = integer", <<<_EOM_
-外部 ROM イメージファイルを使うかどうかを指定します。
-0 なら使わない、1 なら使うです。
-デフォルトは 0 です。
+config_item("mpu-pseudo-stop = integer", <<<_EOM_
+m88100 にて疑似 STOP 状態を有効にするかどうかを指定します。
+0 なら無効(実機と同じ動作)、1 なら有効で、デフォルトは 1 です。
+m88100 には、m68k の STOP 命令 (割り込みが上がるまで何もせず待つ)
+に相当する命令がなく、
+大抵ビジーウェイトループで割り込みが上がるのを待つことになります。
+これは実機では (消費電力を減らす手段がないという些細な問題以外には)
+何のデメリットもないのですが、
+エミュレータで特に高速動作させている時には割り込みが上がるまで
+(例えば人間がキーを入力するまで) ホスト CPU パワーを使い潰してビジーウェイトループを実行し続けることになり、ホスト CPU があっつあつになります。
+それを防ぐための機能です。
+特徴的な命令列を検出して実現しているので、すべての状況で動作するわけではありません。
+_EOM_
+);
+
+config_item("prom-image = path", <<<_EOM_
+LUNA-I/LUNA88K の外部 ROM イメージファイルのパスを指定します。
+path がファイル名のみなら VM ディレクトリとその親ディレクトリからこのファイル名を検索します。
+path が相対パスなら VM ディレクトリからの相対パスになります (現在のディレクトリからではありません)。
+空にすると内蔵 ROM を使用します。
+デフォルトは空です。
+Specifies the LUNA-I/LUNA88K's external ROM image file path.
+If the path does not have any path delimiters,
+the VM directory and then its parent directory will be searched.
+If the path is a relative path,
+it will be path from the VM directory, not from the current
+directory.
+If the path is empty, internal emulated ROM will be used.
+The default value is empty.
-実機を持っていない場合はこの値を 0 にしておくと、
+実機を持っていない場合はこの値を空に (= デフォルトのままに) しておくと、
nono 内蔵のなんちゃって下位互換 ROM で起動します。
+If you does not have the real LUNA machines,
+you can boot with nono's internal downward compatible emulated ROM
+if you set this field empty (or leave it as the default).
-実機を持っている場合は ROM ファイルを用意して
-この値を 1 にすると実機 ROM で起動できます。
-ROM ファイルは実機の 0x41000000-0x4101ffff (128KB) を PROM.DAT (大文字)
-という名前で保存したもので、VM ディレクトリに置きます。
+LUNA-I 実機を持っている場合は
+ROM ファイルを指定することで実機 ROM で起動できます。
+ROM ファイルは実機の 0x41000000-0x4101ffff (128KB) を保存したものです。
+今のところ ROM は V4.22 (Thu Jul 27 11:45:42 1989) のみサポートしています。
+それ以外については何も分かりません。
+If you have the real LUNA-I machine,
+you can boot with the real ROM spcifying the ROM file path.
+The ROM file is extracted from 0x41000000-0x4101ffff (128KB) of
+the real LUNA-I machine.
+For now, only V4.22 (Thu Jul 27 11:45:42 1989) is supported.
+I have no idea about other ROMs.
+
+LUNA88K 実機の場合は 0x41000000-0x4103ffff (256KB) を保存したものです。
+今のところ ROM は version 1.20 のみサポートしています。
+
+For LUNA88K,
+the ROM file is extracted from 0x41000000-0x4103ffff (256KB).
+For now, only version 1.20 is supported.
+_EOM_
+);
+
+config_item("ram-size = integer", <<<_EOM_
+搭載する RAM サイズを MB 単位で指定します。
+LUNA-I のデフォルトは 16MB です。
+16MB 未満は 4MB 単位で、
+16MB 以上は 255MB まで 1MB 単位で指定できます
+(ちなみに NetBSD/luna68k の起動には最低でも 8MB 必要です)。
+LUNA88K のデフォルトは 64MB です。
+64MB 未満は 16MB 単位で、
+64MB 以上は暫定で 255MB まで 1MB 単位で指定できます。
+Specifies the RAM size in MB.
+On LUNA-I, the default is 16MB.
+If the size is less than 16MB, you can specify in 4MB unit.
+If larger, you can specify up to 255MB in 1MB unit.
+By the way, NetBSD/luna68k needs at least 8MB to boot.
+On LUNA88K, the default is 64MB.
+If the size is less than 64MB, you can specify in 16MB unit.
+If larger, you can specify up to tentative 255MB in 1MB unit.
+_EOM_
+);
+
+config_item("show-statuspanel = integer", <<<_EOM_
+ステータスパネルを表示するかどうかを指定します。
+0 なら非表示、1 なら表示です。
+起動後はメニューから変更可能です。
+Specifies whether to display the status panel or not.
+If 0, it is hidden; if 1, it is shown.
+You can change it on GUI menu after boot.
_EOM_
);
-config_item("spc0-idN-image = devtype,path", <<<_EOM_
-SCSI デバイスを指定します。N には 0 から 7 が入ります。
-ID 7 は本体が使用しますので指定しないでください。
-値はデバイス種別 devtype とイメージパス path
-を ","(カンマ) で区切って並べた形式で、
-今の所デバイス種別 devtype には "hd"(ハードディスク) のみ指定可能です。
-ディスクイメージパスが相対パスなら VM ディレクトリからの相対パスになります。
-
-例えば、nono.cfg と同じディレクトリに置いたディスクイメージ luna.img
-を使う場合、
-LUNA では通常 ID 6 をプライマリ HDD に割り当てるのでこんな感じになります。
+config_item("spc0-idN-image = devtype[,path]", <<<_EOM_
+SCSI デバイスとイメージを指定します。キーの N には 0 から 7 が入ります。
+ただし ID 7 は本体が使用しますので指定しないでください。
+値はデバイス種別 devtype とディスクイメージパス path
+を ","(カンマ) で区切って並べた形式です。
+デバイス種別 devtype は以下のいずれかです。
+
+Specifies SCSI device and image. N in the key is 0 to 7.
+But don't specify ID 7 because the host uses it.
+The value is in a form of device type devtype and
+the disk image path path separated by ","(comma).
+devtype can be one of the following:
+
+- hd … HD drive
+
- cd … CD-ROM drive
+
- mo … MO drive
+
+
+
+devtype が hd なら path は省略できません。
+devtype が cd か mo なら path は省略可能です。
+イメージパスが相対パスなら VM ディレクトリからの相対パスになります。
+
+If devtype is hd, path cannot be ommitted.
+If devtype is cd or mo, path can be ommitted.
+If the path is relative path, it is from the VM directory.
+
+
+例えば、nono.cfg と同じディレクトリに置いた sd0.img を
+起動 HDD ディスクイメージとして使い
+(LUNA では通常 ID 6 をプライマリ HDD に割り当てます)、
+ID 5 に同じディレクトリの install.iso をセットした CD ドライブを、
+ID 4 に起動時メディアなしの MO ドライブを接続する場合は次のようになります。
+For example, if you use a harddisk image sd0.img placed in the same
+directory as nono.cfg
+(LUNA usually assigns ID 6 to the primary HDD),
+ID 5 for CD-ROM drive that loads install.iso in the same directory,
+and ID 4 for MO drive without media on boot,
+write as following:
-spc0-id6-image = hd,luna.img
+spc0-id6-image = hd,sd0.img
+spc0-id5-image = cd,install.iso
+spc0-id4-image = mo
_EOM_
);
-config_item("spc0-idN-writeprotect = integer", <<<_EOM_
-指定の SCSI デバイスへの書き込みを無視するかどうか指定します。
+config_item("spc0-idN-seektime = integer", <<<_EOM_
+指定の SCSI HDD の平均シークタイムを msec 単位で指定します。
+現在のデフォルトは 0 です (S・S・D!! S・S・D!!)。
+16 程度を指定すると幾分往時に思いを馳せることが出来るかもしれませんが、
+今の所あまり安定していません。
+Specifies the average seek time of specified SCSI HDD in msec.
+Currently, the default value is 0
+(This may be something like SSD :-).
+If you specify about 16 or so, you can feel nostalgic,
+but this feature is still unstable.
+_EOM_
+);
+
+config_item("spc0-idN-writeignore = integer", <<<_EOM_
+指定の SCSI HD デバイスへの書き込みを無視するかどうか指定します。
0 なら通常動作(書き込みを行う)です。
1 なら書き込みコマンドは成功したように振る舞いますが実際には
ディスクイメージに一切書き戻しません。
fsck を気にせずカーネルのデバッグとかを行いたい場合にはどうぞ。
何が起きるか意味が分からない人は指定しないでください。
デフォルトは 0 です。
+Specifies whether nono ignores writing to SCSI HD devices.
+0 means normal operation (writes to the devices).
+If 1 is specified,
+nono will not actually write back to the disk image
+even though the write command is succeeded.
+nono's SCSI devices acts as
+write command is successfully done but it never writes back
+to the actual disk image.
+This is useful for kernel debugging because it does not require fsck
+after the kernel hangs.
+But don't use this flag if you don't understand this paragraph.
+The default value is 0.
+
+ちなみに、メディアを書き込み禁止にしたい場合はこれではなく、
+イメージファイルの書き込み権を落としてください。
+By the way, if you want to make the media write-protected,
+clear the write permission from the image file
+(instead of this setting).
_EOM_
);
-
+config_item("spc0-idN-writeprotect = integer", <<<_EOM_
+古いオプションです。
+代わりに spc0-idN-writeignore を使ってください。
+このオプションは開発用です。
+Obsolete.
+Use spc0-idN-writeignore instead.
+This option is for developers.
+_EOM_
+);
?>