--- nono/doc/index.php 2026/04/29 17:04:30 1.1.1.1 +++ nono/doc/index.php 2026/04/29 17:05:11 1.1.1.13 @@ -1,14 +1,13 @@ + 1) - get_version($_SERVER['argv'][1]); - -function get_version($filename) -{ - global $nono_ver; - - $fp = fopen($filename, "r"); + $fp = fopen("../lib/header.h", "r"); if ($fp !== false) { while (($buf = fgets($fp)) !== false) { if (preg_match("/NONO_MAJOR_VER\s+\((\d+)\)/", $buf, $m)) { @@ -26,87 +25,127 @@ function get_version($filename) } fclose($fp); - $nono_ver = "${nono_major}.${nono_minor}.${nono_patch} (${nono_date})"; + $nono_ver = "${nono_major}.${nono_minor}.${nono_patch}"; } -} ?> - - -nono document - - + -

nono

+

nono ()

-nono は NetBSD とかで動作する OMRON LUNA-I とかのエミュレータです。 -nono is OMRON LUNA-I emulator runs on NetBSD and so on. +nono は NetBSD とかで動作する OMRON LUNA-I/LUNA-88K +(と SHARP X68030) のエミュレータです。 +nono is OMRON LUNA-I/LUNA-88K (and SHARP X68030) emulator +runs on NetBSD and etc.
-

ビルド方法 How to build

+ +

Index of this page:

-NetBSD/amd64-9.0 の場合以下のパッケージが必要です。 +1. ビルド方法 How to build
+2. 実行方法 How to execute
+3. 設定 Configuration
+4. VM について About VM
+5. 実行してみる Try it
+6. ホストネットワーク設定例 Example of host network setup
+7. 既知の問題 Known Issues
+8. 過去のバージョンからの移行方法 +How to migrate from old versions
+9. 変更履歴 Changes
+10. 連絡先、ライセンス等 Contact, License, etc
+
+

+

+緑背景は新規または目立った更新のあった箇所です。 +Green Background is new or updated paragraph. +
+ + + +

1. ビルド方法 How to build

+
+ビルドには以下が必要です。 +The followings are required for build. + - - -アーカイブを展開したら以下のようにします。 + +

+wxWidgets は NetBSD(pkgsrc) なら pkgsrc/x11/wxGTK30 です。 +OPTIONS:gtk3 で動作確認しています。 +If you use NetBSD(pkgsrc), +wxWidgets is pkgsrc/x11/wxGTK30 (OPTIONS:gtk3 is tested). + +

+(NetBSD 以外でのビルドはサポートしていませんが) +Ubuntu 20.04 ではたぶん以下のパッケージが必要です。 +You may need the following packages on Ubuntu 20.04 +(though we won't support non-NetBSD platform). +

+ + +

+nono のソースアーカイブを展開したら以下のようにビルドします。 +configure には環境変数 CC、CXX でコンパイラを指定することが出来ます。 +また wx-config が標準的な名前で提供されていないために見付けられない場合には +環境変数 WX_CONFIG にパスを指定することが出来ます。 +Extract the nono's source archive and build as following. +You can specify C/C++ compiler using environment variable CC and CXX +if configure cannot find standard name suitable compiler. +Also, you can specify wx-config path using environment variable WX_CONFIG +if configure cannot find wx-config. +

+-DNOTEST は開発者用のテストツールをビルドしないためのものです。 +With -DNOTEST, the build excludes test tools which is needed +for developers only. +

 % ./configure
-% make depend
-% make
+% make -DNOTEST depend
+% make -DNOTEST
+% su
+# make install
 
-まだ make install はないです。 -wx/nono が GUI 版実行ファイル、 -cli/nono-cli がコマンドライン版です。 + +

+2つの実行ファイルがインストールされます。 +nono が GUI 版実行ファイル、 +nono-cli がコマンドライン版です。 +Two executables will be installed. +nono is the GUI executable and nono-cli is +the command line executable.

-

コマンドラインオプション Command Line Option

+ +

2. 実行方法 How to execute

+
+nono は複数機種に対応しているため、設定なしでは起動できません。 +デフォルトではカレントディレクトリの nono.cfg という設定ファイルを探します。 +-c オプションで設定ファイル (VM ディレクトリ) の位置を指定したり、 +あるいは -V オプションで設定を列挙することも出来ます。 +
+ + +
2.1. コマンドラインオプション Command Line Option
file", <<<_EOM_ -ホストの file をロードして実行します。 -ファイルが gzip 圧縮されていれば自動的に展開します。 -(展開後の) ファイル形式は a.out (OMAGIC) か ELF で、 -実際にはブートローダとカーネル程度しか想定していません。 -設定ファイルの prom-use-rom=1 とともに指定されると --A のほうが優先します。 -_EOM_ -); - -option_item("-c vmdir", <<<_EOM_ -VM ディレクトリを指定します。省略するとカレントディレクトリとします。 +option_item("-c vmpath", <<<_EOM_ +VM ディレクトリ/設定ファイルを指定します。 +vmpath がディレクトリならそのディレクトリの中の nono.cfg +を設定ファイルとします。 +vmpath がファイルならそれを設定ファイルとします。 +そしていずれの場合も +設定ファイルがあるディレクトリを VM ディレクトリとします。 +-c オプションを省略すると vmpath をカレントディレクトリとします。 +Specifies the VM directory/configuration file. +If vmpath is a directory, +make nono.cfg in that directory a configuration file. +Or if vmpath is a file, +make the specified file a configuration file. +And in both cases, +make the directory where that file is located a VM directory. +If -c option is omitted, +vmpath is considered as the current directory. _EOM_ ); option_item("-f", <<<_EOM_ 高速モードで起動します。 GUI なら起動後にもメニューから変更できますが、その初期値を変えるだけです。 +Boot as the fast mode. +You can change this mode on GUI menu after boot, +and the option only changes its initial state. _EOM_ ); option_item("--fontsize height", <<<_EOM_ GUI 版のみ。 全サブウインドウの起動時のフォントサイズを指定します。 -height には 12, 16, 24 +height には 12, 16 のいずれかを指定します。デフォルトは 12 です。 +起動後にメニューから変更できます。 + +GUI Only. +Specifies the initial fontsize on all sub windows. +height is one of 12 or 16. +The default value is 12. +You can change this value on GUI menu after boot. _EOM_ ); @@ -162,27 +216,62 @@ GUI 版のみ。 任意倍率は起動時のみ指定可能です (そのうちなんとかしたい)。 デフォルトは 1.0 です。 + +GUI Only. +Specifies the initial main window scale in real number. +You can change this scale on GUI menu after boot, +but unlike this option, there are only a few preset choices +(Should be improved in someday). +The default value is 1.0 _EOM_ ); option_item("--show-config", <<<_EOM_ 設定ファイルと -V オプションを読み込んだ結果を表示します。 +Shows the result of reading configuration file and +parsing -V options. _EOM_ ); option_item("-v", <<<_EOM_ バージョンを表示します。 +Shows the version. _EOM_ ); option_item("-V name=value", <<<_EOM_ -設定ファイルの内容を個別に上書きします。 +設定ファイルで指定した name=configvalue の代わりに +このオプションの name=value を適用します。 +name が正しくない場合はエラー終了します。 +Use this name=value +instead of name=configvalue specified in configuration file. +If name is not correct, it will exit on error. +_EOM_ +); + +option_item("-X file", <<<_EOM_ +ホストの file をロードして実行します。 +file が相対パスの場合カレントディレクトリからのパスになります。 +ファイルが gzip 圧縮されていれば自動的に展開します。 +(展開後の) ファイル形式は a.out (OMAGIC) か ELF で、 +実際にはブートローダとカーネル程度しか想定していません。 +設定の prom-imageluna-dipsw1 の内容(後述)によらず +内蔵の互換 PROM で起動し、直ちにホストファイルを実行します。 +Loads and executes host's file. +If file is relative path, +it is path from the current directory. +If the file is gzip'd, it is automatically extracted. +The supported file format (after extracting) is a.out (OMAGIC) or ELF. +Actually, it only assumes bootloaders or kernels. +Regardless of prom-image and luna-dipsw1 configuration +(see below), +the internal emulated PROM loads and executes the host file immediately. _EOM_ ); ?>
-以下開発用。 +以下開発用。For developers:
{$desc}\n"; } -option_dev("-b hexaddr", <<<_EOM_ +option_dev("-b hexaddr[,skipcount]", <<<_EOM_ デバッガのブレークポイントを 16進数で指定します。 _EOM_ ); @@ -210,8 +299,8 @@ _EOM_ option_dev("-D", <<<_EOM_ コンソールをデバッガとして使用します。 --d を指定しなくても起動時にプロンプトで停止します -(そのうちなんとかしたい)。 +過去との互換性のために存在していますが、 +-V debugger-driver=stdio と等価です。 _EOM_ ); @@ -223,9 +312,15 @@ option_dev("-L name1=level1file", <<<_EOM_ +-X オプションと同様ですが、PROM のプロンプトで停止します。 +_EOM_ +); + option_dev("-M name[,name2,...]", <<<_EOM_ 起動時に表示するモニタウィンドウを指定します。 カンマで区切って複数指定することも出来ます。 +-Mhelp で name の一覧を表示します。 _EOM_ ); @@ -234,15 +329,25 @@ _EOM_
-

設定 Configuration

+ + +

3. 設定 Configuration

-VM の設定ファイルはその VM ディレクトリ内の nono.cfg です。 +VM の設定ファイルはその VM ディレクトリ内の nono.cfg +(または -c で指定したファイル) です。 書式は key = value 形式で1行1項目ずつです。 keyvalue の前後の空白は取り除かれます。 また空行と "#" で始まる行は無視します。 -知らないキーの行も無視します。 +知らないキーは警告を出した上で無視します。 +VM configuration file is nono.cfg +(or the file specified by -c option) in the VM directory. +Its syntax is key = value format, one per line. +White spaces before and after key and value are ignored. +Blank lines, lines beginning with "#" are also ignored. +The lines with unrecognized key are ignored with a warning.

設定項目は次の通りです。 +The configuration items are:

string", <<<_EOM_ -VM 種別を指定します。今の所 string に -指定できるのは luna (LUNA-I) だけですが、省略不可です。 +VM 種別を以下のいずれかから指定します。 +省略不可です。 +Specifies the VM type from the following. +This field is mandatory. + +
 luna … LUNA-I +
luna88k … LUNA-88K +
x68030 … X68030 (Experimental) +
_EOM_ ); -config_item("debugger-port = integer", <<<_EOM_ -デバッガの TCP 待ち受けポート番号を指定します。 -0 なら待ち受けを行いません。 -デフォルトは 9999 です(適当)。 +config_item("cgrom-image = path", <<<_EOM_ + +(X68030 Only) +X68030 の外部 CGROM イメージファイルのパスを指定します。 +CGROM は 768KB です。 +path がファイル名のみなら VM ディレクトリとその親ディレクトリからこのファイル名を検索します。 +path が相対パスなら VM ディレクトリからの相対パスになります (現在のディレクトリからではありません)。 +空にすると nono 内蔵の互換 CGROM を使用します。 +デフォルトは空です。 +Specifies the X68030's external CGROM image file path. +This CGROM is 768KB. +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, nono's builtin compatible CGROM will be used. +The default value is empty. _EOM_ ); -config_item("ethernet-hostdriver = string", <<<_EOM_ -イーサネットデバイスのホスト側ドライバを指定します。 -nonetapbpf が指定できます。 +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("debugger-driver = string", <<<_EOM_ +デバッガのコンソールドライバを指定します。 +stdiotcpnone が選択可能です。 +stdio は標準入出力を使用します。 +tcp は TCP ポートで TELNET プロトコルで待ち受けます。 none ならホスト側とは一切通信を行いません。 -tapbpf かはホスト OS によってビルド時に決定します。 -NetBSD なら tap です。 +デフォルトは none です。 +Specifies console driver of the debugger. +stdio, tcp, and none can be specified. +stdio uses the standard input/output. +tcp listens on TCP port using TELNET protocol. +none doesn't make any communication with the host. +The default is none. +_EOM_ +); + +config_item("debugger-tcp-port = integer", +<<<_EOM_ +デバッガのコンソールドライバが tcp の時の TCP 待ち受けポート番号を指定します。 +Specify the TCP port number that debugger console driver listens. _EOM_ ); config_item("ethernet-macaddr = string", <<<_EOM_ +(LUNA Only) イーサネットデバイスの仮想マシン側の MAC アドレスを指定します。 XX:XX:XX:XX:XX:XX 形式で指定します。 @@ -281,156 +435,1620 @@ config_item("ethernet-macaddr = strin _EOM_ ); +config_item("fd-drive = integer", <<<_EOM_ +(X68030 Only) +フロッピードライブの数を 0 から 4 で指定します。 +デフォルトは 2 です。 +Specify the number of floppy drives from 0 to 4. +The default is 2. +_EOM_ +); + +config_item("fdN-image = path", <<<_EOM_ +(X68030 Only) +フロッピードライブ N に起動時に挿入するディスクイメージを指定します。 +イメージパスが相対パスなら VM ディレクトリからの相対パスになります。 +起動後はメニューから操作できます。 +デフォルトは空です。 +Specify a diskimage to be inserted to floppy drive N at startup. +If the path is relative path, it is from the VM directory. +You can also operate them from menu after startup. +The default is empty. +_EOM_ +); + +config_item("fpu-type = value", <<<_EOM_ +(X68030 Only) +FPU を装着するかどうか指定しています。 +none なら FPU を装着しません。 +68881 なら FPU として 68881 を装着します。 +現状 68882 はサポートしていません。 +また none の代わりに 0、 +68881 の代わりに 1 と書くこともできます。 +デフォルトは 68881 です。 +LUNA-I はたぶん 68881 搭載モデルのみのため設定できません。 +Specify whether to install FPU or not. +If none, FPU is not installed. +If 68881, 68881 FPU is installed. +68882 is not supported yet. +And, none can also be written as 0, +68881 can also be written as 1. +The default is 68881. +This item cannot be specified on LUNA-I +because (probably) all LUNA-I has 68881. + +_EOM_ +); + +config_item("hostcom-driver = string", <<<_EOM_ +シリアルポートのホスト側ドライバを指定します。 +stdiotcpnone が選択可能です。 +stdio は標準入出力を使用します。 +tcp は TCP ポートで TELNET プロトコルで待ち受けます。 +none ならホスト側とは一切通信を行いません。 +デフォルトは none です。 +Specifies the host driver of serial port. +stdio, tcp, and none can be specified. +stdio uses the standard input/output. +tcp listens on TCP port using TELNET protocol. +none doesn't make any communication with the host. +The default is none. +_EOM_ +); + +config_item("hostcom-tcp-port = integer", <<<_EOM_ +ホストドライバが tcp の時の TCP 待ち受けポート番号を指定します。 +Specify the TCP port number that host driver listens. +_EOM_ +); + +config_item("hostcom-fallback = integer", <<<_EOM_ +hostcom-driver で指定したドライバが使用可能でなかった時、 +0 ならプロセスを終了します。1 なら none を選択して実行を継続します。 +デフォルトは 0 です。 +Specify the behavior when the driver which is selected by +hostcom-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("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_ +(LUNA Only) +イーサネットデバイスのホスト側ドライバを指定します。 +afpacketbpftap のうち +ホスト OS がサポートしているものと autonone が選択可能です。 +afpacket は Linux の AF_PACKET ソケットを使用します。 +bpf は bpf(4) デバイスを使用します。 +tap は tap(4) インタフェースを使用します。 +none ならホスト側とは一切通信を行いません。 +auto ならホスト OS がサポートしているもののうち +tapafpacketbpf を順に試します。 +デフォルトは 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("hostnet-afpacket-ifname = ifname", <<<_EOM_ +(LUNA Only) +ホストドライバが afpacket の時にバインドするインタフェースを1つ指定します。 +ifnameauto +なら使用可能なインタフェースを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("hostnet-bpf-ifname = ifname", <<<_EOM_ +(LUNA Only) +ホストドライバが bpf の時にバインドするインタフェースを1つ指定します。 +ifnameauto +なら使用可能なインタフェースを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("hostnet-tap-devpath = path", <<<_EOM_ +(LUNA Only) +ホストドライバが 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_ +(LUNA Only) +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("iplrom1-image = path", <<<_EOM_ + +(X68030 Only) +X68030 の外部 IPLROM イメージファイルのパスを指定します。 +こちらは 0xfe0000..0xffffff の 128KB の部分で、IPLROM30 と呼ばれているほうです。 +path がファイル名のみなら VM ディレクトリとその親ディレクトリからこのファイル名を検索します。 +path が相対パスなら VM ディレクトリからの相対パスになります (現在のディレクトリからではありません)。 +空にすると無償配布されている IPLROM30 を使用します。 +デフォルトは空です。 +Specifies the X68030's external IPLROM image file path. +This one contains 128KB at 0xfe0000..0xffffff and is known as IPLROM30. +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, the public released IPLROM30 will be used. +The default value is empty. +_EOM_ +); + +config_item("iplrom2-image = path", <<<_EOM_ + +(X68030 Only) +X68030 の外部 IPLROM イメージファイルのパスを指定します。 +こちらは 0xfc0000..0xfdffff の 128KB の部分で、ROM30 と呼ばれているほうです。 +path がファイル名のみなら VM ディレクトリとその親ディレクトリからこのファイル名を検索します。 +path が相対パスなら VM ディレクトリからの相対パスになります (現在のディレクトリからではありません)。 +空にすると内蔵 ROM を使用します。 +内蔵 ROM は NetBSD/x68k が起動する程度の SCSI IOCS のみサポートしています。 +デフォルトは空です。 +Specifies the X68030's external IPLROM image file path. +This one contains 128KB at 0xfc0000..0xfdffff and is known as ROM30. +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 ROM supports only enough SCSI IOCS to boot NetBSD/x68k. +The default value is empty. +_EOM_ +); + +config_item("keyboard-connect = integer", <<<_EOM_ +起動時にキーボードを本体に接続するかどうかを指定します。 +1 なら接続し、0 なら接続しません。デフォルトは 1 です。 +起動後はメニューから変更可能です。 +Specify whether to connect keyboard on boot. +If 1, it is connected; if 0, it isn't connected. The default is 1. +You can change it on GUI menu after boot. +_EOM_ +); + +config_item("luna-adjust-misused-epoch = integer", <<<_EOM_ +(LUNA Only) +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 などはこの +RTC の年の値を 1970年からの経過年として使用しています。 +例えば1970年はうるう年ではないため 2月28日の翌日は 3月1日ですが、 +MK48T02 的には 00年であるためうるう年と認識し 2月28日の翌日が2月29日になります。 +このように、これらの OS を使っている場合実機の +RTC は4年のうち約2年間、1日ずれた日付を指しているようです。 +しかしながら、RTC の時刻は OS 起動時に一度読んだ後は基本的に参照しない上、 +今時必要なら NTP で時間を合わせるため、 +実機でも問題が顕在化することはまずないと思います。 +nono の場合は実機と異なり、アプリケーション実行中しか RTC が進まないため、 +補正がない場合の動作が問題になるのは +nono を起動したまま偶数年の2月末日から日付をまたいで、 +かつ nono を起動したまま OS を再起動して NTP などで時刻修正を行わなかった時 +だけだと思います。 +このオプションはほぼ開発者向けの動作確認用です。 +_EOM_ +); + config_item("luna-dipsw1 = string", <<<_EOM_ +(LUNA Only) 本体前面 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) を参照してください。 +LUNA-88K でのデフォルトは 11111111 です。 +各スイッチの内容は以下のリンクを参照してください。 +On LUNA-88K, the default value is 11111111. +See the following link about DIPSW.
+→ OpenBSD manual pages: boot_luna88k(8) _EOM_ ); config_item("luna-dipsw2 = string", <<<_EOM_ +(LUNA Only) 本体前面 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("luna-video-plane = integer", <<<_EOM_ +(LUNA Only) +LUNA のビデオボードのプレーン数を 1 か 4 で指定します。 +1 ならモノクロビデオボード、 +4 なら16色 (4bpp) ビデオボードに相当します。 +8bpp ボードは(まだ?)サポートしていません。 +デフォルトは今の所 1 です (将来変更するかもしれません)。 +Specify number of planes on LUNA video board. +The valid values are 1 or 4. +1 means a monochrome video board, +4 means 16-color (4bpp) video board. +Note that 8bpp video board is not (yet?) supported. +The default value is 1 for now (It may be changed in the future). +_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、LUNA-88K と X68030 なら 25MHz です。 +Specifies the MPU clock in MHz. +The default value is 20MHz on LUNA-I, or 25MHz on LUNA-88K +and X68030. _EOM_ ); -/* luna には不要 - config_item("mpu-has-fpu", ""); */ +config_item("mpu-pseudo-stop = integer", <<<_EOM_ +(LUNA-88K Only) +m88100 にて疑似 STOP 状態を有効にするかどうかを指定します。 +0 なら無効(実機と同じ動作)、1 なら有効で、デフォルトは 1 です。 +m88100 には、m68k の STOP 命令 (割り込みが上がるまで何もせず待つ) +に相当する命令がなく、 +大抵ビジーウェイトループで割り込みが上がるのを待つことになります。 +これは実機では (消費電力を減らす手段がないという些細な問題以外には) +何のデメリットもないのですが、 +エミュレータで特に高速動作させている時には割り込みが上がるまで +(例えば人間がキーを入力するまで) ホスト CPU パワーを使い潰してビジーウェイトループを実行し続けることになり、ホスト CPU があっつあつになります。 +それを防ぐための機能です。 +特徴的な命令列を検出して実現しているので、すべての状況で動作するわけではありません。 +_EOM_ +); -config_item("prom-use-rom = integer", <<<_EOM_ -外部 ROM イメージファイルを使うかどうかを指定します。 -0 なら使わない、1 なら使うです。 -デフォルトは 0 です。 +config_item("prom-image = path", <<<_EOM_ +(LUNA Only) +LUNA-I/LUNA-88K の外部 ROM イメージファイルのパスを指定します。 +path がファイル名のみなら VM ディレクトリとその親ディレクトリからこのファイル名を検索します。 +path が相対パスなら VM ディレクトリからの相対パスになります (現在のディレクトリからではありません)。 +空にすると内蔵 ROM を使用します。 +デフォルトは空です。 +Specifies the LUNA-I/LUNA-88K'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). +

+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.

-実機を持っている場合は ROM ファイルを用意して -この値を 1 にすると実機 ROM で起動できます。 -ROM ファイルは実機の 0x41000000-0x4101ffff (128KB) を PROM.DAT (大文字) -という名前で保存したもので、VM ディレクトリに置きます。 +LUNA-88K 実機の場合は 0x41000000-0x4103ffff (256KB) を保存したものです。 +今のところ ROM は version 1.20 のみサポートしています。 + +For LUNA-88K, +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 単位で指定します。Specifies the RAM size in MB. +

    +
  • LUNA-I のデフォルトは 16MB です。 +16MB 未満は 4MB 単位で、 +16MB 以上は 255MB まで 1MB 単位で指定できます +(ちなみに NetBSD/luna68k の起動には最低でも 8MB 必要です)。 +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. +
  • LUNA-88K のデフォルトは 64MB です。 +64MB 未満は 16MB 単位で、 +64MB 以上は暫定で 255MB まで 1MB 単位で指定できます。 +On LUNA-88K, 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. +
  • X68030 のデフォルトは 12MB です。 +4MB から 12MB まで 1MB 単位で指定できます。 +On X68030, the default is 12MB. +You can specify it in 1MB unit from 4MB to 12MB. +
_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("rtc-epoch-year = integer", <<<_EOM_ +(LUNA Only) +RTC (MK48T02) の基準年を指定します。 +デフォルトは 1970年です。 +NetBSD/luna68k、OpenBSD/luna88k はいずれも基準年を 1970年としていますので、 +デフォルトのままで構いません。 +ゲスト OS に 4.4BSD を使用する際は 1900 を指定します。 +Specifies the RTC (MK48T02) epoch year. +The default is 1970. +Since both NetBSD/luna68k and OpenBSD/luna88k use 1970 as epoch year, +there is no need to touch this value. +If you boot 4.4BSD on LUNA-I as the guest OS, specify 1900. +_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 は以下のいずれかです。 + +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 +
+ +

+devtypehd なら path は省略できません。 +devtypecdmo なら 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_ +); +config_item("sram-sync-ramsize = integer", <<<_EOM_ + +(X68030 Only) +SRAM の RAM 容量欄を実際の RAM サイズに合わせるかどうかを指定します。 +0 なら何もしません (実機と同じ)。 +1 なら、アプリケーション起動時に +SRAM の \$ed0008.L (RAM 容量) を ram-size の設定値で更新します。 +この更新は、 +アプリケーション起動時に SRAM マジックが正しく書かれている場合のみ行われます。 +デフォルトは 1 です。 +Specify whether to synchronize a RAM size field in SRAM +with real RAM size or not. +If 0, the application will do nothing (as same as the real). +If 1, the application updates(synchronizes) +\$ed0008.L (RAM size) in SRAM with configuration value of ram-size. +This update is performed once only if +the SRAM magic string is correct at the application startup. +The default is 1. + +_EOM_ +); ?>

-

実行してみる Try it

+ + +

4. VM について About VM

+ +
実装状況 Implementation Status +
+ +
: ほぼ実装済み Mostly implemented +
: 困らない程度には実装済み Works +
: とりあえず動いてる程度 Works somehow +
× : 未実装 Not implemented +
: 実装予定なし Not planned +
+ + +Cache not implemented +FPU (68881) ◎ +BT454 ◎ +CRTC2 ○ 標準で使用する値のみサポート +Frame buffer ◎ +Keyboard/Mouse ◎ +SIO ◎ +PIO ○ +Ethernet (AM7990) ◎ LARF を除く Except LARF +NVRAM&RTC (MK48T02) ◎ +Front LCD ◎ +SPC ◎ +SCSI HD/CD/MO Devices ○ +XP とその向こうXP and beyonds × +電源 Power Circuit ○ + +LUNA-88K specific +MPU (88100 part) ○ マルチプロセッサ未実装、バグも未実装? MP (and bugs?) not implemented +MPU (88200 part) ◎ +MPU (88110) — 実装予定なし Not planned +FUSEROM ○ + +X68030 +MPU (68030) ○ キャッシュ未実装、ファンクションコード未実装 Cache and FC not implemented +MPU (68EC030) — 実装予定なし Not planned +FPU (68881) ◎ 68882 は未実装 68882 not implemented +DMAC ○ +CRTC/VC △ 768x512 のテキスト画面のみサポート Only 768x512 text screen supported +FDC/FDD ○ +標準・拡張エリアセット Areaset × +ADPCM/OPM × +グラフィック機能全般 All other graphics × 当面予定なし Not scheduled +Keyboard ◎ TVコントロールを除く Except TV Control +Mouse ◎ 本体接続のみ +MFP △ +PPI △ +Printer × +RTC ◎ アラームを除く Except Alarm +SPC ◎ +SCSI HD/CD/MO Devices ○ +SCC ◎ +SRAM ◎ +システムポートSystem port △ +テキスト画面Text screen ○ +電源 Power curcuit ○ +Nereid Ethernet × +Nereid Bank memory × +Nereid USB — 実装予定なし Not planned +拡張メモリ Extended memory × +__EOM__; + $table_lines = preg_split("/\n/", $table); + foreach ($table_lines as $line) { + if ($line == "") { + continue; + } else if (preg_match("/\t/", $line) == false) { + // table title + print "
{$br}{$line}\n"; + $br = ""; + } else { + list ($h, $m, $d) = preg_split("/\t+/", $line, 3); + print "
{$h}\n"; + print " {$m}\n"; + print " {$d}\n"; + } + } +?> +
+
+ +
MPU (68030)
+
+68030 はキャッシュが未実装です。 +これに伴い命令の所要クロック数もまだ正しくなく、 +そのためクロック測定などでは正確な値が出ません。 +また ATC (アドレス変換キャッシュ) は実際の仕様とは異なり高速化してあります。 +68030 cache is not implemented. +Therefore, number of clock cycle is not correct. +ATC (Address Translation Cache) is differ from and faster than the real 68030. + +
+ +
LUNA の ROM エミュレーション
+
+LUNA-I、LUNA-88K で PROM の外部イメージを指定しない場合 +(prom-image が空の場合)、 +内蔵の独自 ROM が動作し、コンソールモニタが起動します。 +このコンソールモニタの動作は実機のそれとよく似ていますが、 +これは実機確認の際に操作方法が違いすぎると(自分が)困るため仕方なく似せているもので、 +忠実なコピーを作る目的ではありません。 + +
+ +
X68030 の ROM (ROM30) エミュレーション
+
+X68030 で ROM30 の外部イメージを指定しない場合 +(iplrom2-image が空の場合)、内蔵の独自 ROM が組み込まれます。 +本来の ROM30 には SCSIIOCS の他に ROM デバッガなどが含まれていますが、 +内蔵 ROM はこのうち SCSIIOCS を NetBSD/x68k が起動するのに十分なだけしか +実装していません。 +Human68k を起動する場合はお手元の実機から ROM イメージを作成してください。 + +
+ +
ステータスパネル Status Panel
-どこかに nono 用のディレクトリを用意し(例えば ~/nono/)、 +ステータスパネル中央にあるパフォーマンスメータのアイコンは +高速モードの状態を表示しています。 +ダブルクリックすると高速/等速モードの指定を切り替えることができます。 +The performance meter's icon at the center of the status panel +shows the VM speed status. +You can switch full speed / syncronized mode by double-clicking +on this icon. + +
+ +… + +マークなしの場合、ユーザが等速モードを指定していて、等速モードで実行中です。 +When no icons are displayed, +the user has specified syncronized mode and +the VM is running in synchronized mode. +
+ +… + +三角3つの場合、ユーザが高速モードを指定していて、高速モードで実行中です。 +高速モード中はパーセントではなく何倍速で動作しているかを表します。 +When an icon (three triangles) is displayed, +the user has specified full speed mode and +the VM is running in full speed mode. +
+ +… + +三角2つの場合、ユーザが高速モードを指定していて、等速モードで実行中です。 +以下のいずれかの状態で起きます。 +When an icon (two triangles) is displayed, +the user has specified full speed mode and +the VM is running in synchronized mode. +This will happen when any of the following occurs: +
    +
  • キー押下中(後述)あるいはキーボードブザー発声中 +When any keys are pressed (see below), +or the keyboard buzzer is sounding. +
  • STOP instruction on m68k. +
  • pseudo STOP state on m88k. +
+
+
+ +
キー入力モード Key input mode
+
+LUNA も X68030 もキーボードは通常日本語キーボードです +(LUNA には英語キーボードも存在するようですが…)。 +そのため、ホストが日本語キーボードの場合とそうでない場合のために +2つの入力モードを用意しています。 +どちらも一長一短があります。 +LUNA and X68030 has the Japanese keyboard +(though I ever heard there are US keyboard for LUNA...). +So nono provides two input modes +for Japanese keyboard users and non Japanese keyboard users. +Both have advantages and disadvantages. +

+JP キーボードモードは、ホストが日本語キーボードであることを前提に +対応するキーの押下、開放をその都度 VM に入力します。 +メリットとしては動作が実機に近くなり、 +特にキーリピート(をハードウェアが行わないこと)も忠実に再現可能です。 +デメリットは ALT + TAB やアクセラレータキーでメニューを開く場合などに +キー入力が残ることがあることです +(キーを押した後でフォーカスが外れるとキーを離したことが +アプリケーションに通知されないため)。 +またホストが日本語キーボードでなければ使いづらいです。 +JP keyboard mode assumes that the host uses the Japanese keyboard. +Each time you presses and releases a key, +nono sends the corresponding key-pressed or key-released to the VM. +One advantage is that it's close to the real machine behavior, +and another is that it can reproduce +the LUNA keyboard itself does not perform a key repeat. +On the other hand, +one disadvantage is that key sometimes remains pressed, +especially when you enter ALT + TAB to switch the application +or enter accelerator key to open the menu +(If the application loses the focus after the key is pressed, +the application will not receive the subsequent key release). +And another disadvantage is that +it will be hard to use for non Japenese keyboard users. +

+一方、キャラクタ入力モードは、ホストから入力された「文字」を +再び LUNA/X68030 のキーコードに解釈し直して VM に入力するモードです。 +例えばゲスト OS に "@" を入力したい場合、 +US キーボードなら [SHIFT] + [2] を、 +JP キーボードなら [@] キーを押しますが、 +どちらも VM には [@] キーの押下、[@] キーの開放が連続して送られます。 +US キーボードで [SHIFT] を押したことは通知されません。 +逆に "=" を入力したい場合、 +US キーボードなら [=] キーを、 +JP キーボードなら [SHIFT] + [-] を押しますが、 +どちらも VM には +[SHIFT]押下 → [-]押下 → [-]開放 → [SHIFT]開放のシーケンスが送られます。 +このようにホストキーボードのレイアウトによらず、 +入力したい文字が入力できるようになり、 +通常のタイピングで困ることはないと思います。 +デメリットは、通常の文字入力以外のタイピングはほぼ出来ないことです。 +[SHIFT] キーを押したままにすることや、 +文字が入力できないキーの組み合わせは入力出来ません。 +もう一つのデメリットはキーリピート(をハードウェアが行わないこと)が再現できず、 +ホスト側のキーリピートが効いてしまうことです +(本来キーリピートが動作しない ROM やブートローダでもキーリピートが効くことは +一般ユーザからはメリットに感じられるかも知れませんが)。 +In contrast, in the character mode, when you type a character, +nono re-converts it into the LUNA/X68030's key code and sends it to the VM. +For example if you want to type "@" in the guest OS, +you would press [SHIFT] + [2] on the US keyboard or [@] on the JP keyboard. +In both cases, the sequence of +[@]-pressed and [@]-released will be sent to the VM. +Note that the fact that you pressed [SHIFT] key on the US keyboard +will not be sent to the VM. +Another example, if you want to type "=", +you would press [=] on the US keyboard or [SHIFT] + [-] on the JP keyboard. +In both cases, the sequence of +[SHIFT]-pressed, [-]-pressed, [-]-released, and [SHIFT]-released +will be sent to the VM. +Thus, you can type what character you want to type, +regardless of your keyboard layout. +Of course there are some disadvantages. +Firstly, it's hard to type any special characters, +for example, you can not type any key conbinations +that don't generate a character. +Or you can not hold [SHIFT] key pressed. +Secondly, the key repeat works (by the host), +even though it should not work as a correct emulation +(Although some of you may feel it an advantage). +

+ +
キャラクタ入力モードのキーコード対応表 +Keycode table in the character mode
+
+キャラクタ入力モードでの、ホストから入力した文字と +VM に送信されるキーの対応は次の通りです。 +ファンクションキーとカーソルキーは文字ではありませんが +特別に対応しています。 +ここに記載のないゲストキーはソフトウェアキーボードからのみ入力できます。 +The following table shows the correspondence between +the character that typed from the host +and the key that will be sent to the VM. +nono can recognize the function keys and arrow keys. +The keys that not listed in this table can +only be typed from the software keyboard window. +

+

+ +a 〜 z [A] 〜 [Z] + 09 [0] 〜 [9] + SPACE [SPACE] + - [-] + ^ [^] + \ [\] + @ [@] + [ [[] + ; [;] + : [:] + ] []] + , [,] + . [.] + / [/] + + AZ [SHIFT]+[A] 〜 [SHIFT]+[Z] + ! [SHIFT]+[1] + " [SHIFT]+[2] + # [SHIFT]+[3] + $ [SHIFT]+[4] + % [SHIFT]+[5] + & [SHIFT]+[6] + ' [SHIFT]+[7] + ( [SHIFT]+[8] + ) [SHIFT]+[9] + = [SHIFT]+[-] + ~ [SHIFT]+[^] + | [SHIFT]+[\] + ` [SHIFT]+[@] + { [SHIFT]+[[] + + [SHIFT]+[;] + * [SHIFT]+[:] + ] [SHIFT]+[]] + < [SHIFT]+[,] + > [SHIFT]+[.] + ? [SHIFT]+[/] + _ [SHIFT]+[_] + + F1 〜 F10 [PF1] 〜 [PF10] + F11 [PF10] + ↑ [↑] + ← [←] + → [→] + ↓ [↓] + ^@ [CTRL]+[@] + ^A^Z [CTRL]+[A] 〜 [CTRL]+[Z] + ^[ [ESC] + ^\ [CTRL]+[\] + ^] [CTRL]+[]] + ^^ [CTRL]+[^] + ^_ [CTRL]+[_] + ^H [BS] + ^I [TAB] + ^M [Enter] +__EOM__; + $table = array(); + $table[0] = array(); + $table[1] = array(); + $table[2] = array(); + $i = 0; + foreach (split("\n", $str) as $s) { + if ($s == "") { + $i++; + continue; + } + $s = preg_replace("/^\t+/", "", $s); + list ($hkey, $gkey) = preg_split("/\t+/", $s); + $table[$i][] = array($hkey, $gkey); + } + + for ($j = 0; $j < count($table); $j++) { + switch ($j) { + case 0: $classname = "left"; break; + default: $classname = "middle"; break; + case 3: $classname = "right"; break; + } + print "\n"; + print ""; + print ""; + print "
HostChar"; + print "GuestKey\n"; + for ($i = 0; $i < count($table[$j]); $i++) { + list ($h, $g) = $table[$j][$i]; + print "
{$h}"; + print "${g}\n"; + } + print "
\n"; + } +?> +
+
+ +
JP キーボードモードのキーコード対応表 +Keycode table in the JP keyboard mode
+
+JP キーボードモードでの、ホストキーと VM に送信されるキーの対応は次の通りです。 +ここに記載のないキーはソフトウェアキーボードからのみ入力出来ます。 +The following table shows the correspondence between +the host key and the guest key. +The keys that not listed in this table can only be enter from +the software keyboard window. +

+

+[F11] [PF10] + [SHIFT-L] [SHIFT-L] + [SHIFT-R] [SHIFT-R] + [↑] [↑] + [←] [←] + [→] [→] + [↓] [↓] + + [DEL] Numpad[DEL] + Numpad[0]〜[9] Numpad[0]〜[9] + Numpad[+] Numpad[+] + Numpad[-] Numpad[-] + Numpad[*] Numpad[*] + Numpad[/] Numpad[/] + Numpad[=] Numpad[=] + Numpad[.] Numpad[.] + Numpad[Enter] Numpad[Enter] +__EOM__; + $table = array(); + $table[0] = array(); + $table[1] = array(); + $table[2] = array(); + $i = 0; + foreach (split("\n", $str) as $s) { + if ($s == "") { + $i++; + continue; + } + $s = preg_replace("/^\t+/", "", $s); + list ($hkey, $gkey) = preg_split("/\t+/", $s); + $table[$i][] = array($hkey, $gkey); + } + + for ($j = 0; $j < count($table); $j++) { + switch ($j) { + case 0: $classname = "left"; break; + case 1: $classname = "middle"; break; + case 2: $classname = "right"; break; + } + print "\n"; + print ""; + print ""; + print "
HostKey"; + print "GuestKey\n"; + for ($i = 0; $i < count($table[$j]); $i++) { + list ($h, $g) = $table[$j][$i]; + print "
{$h}"; + print "${g}\n"; + } + print "
\n"; + } +?> +
+
+ +
キーリピート Key Repeat
+
+LUNA では、キーボードがハードウェア側でキーリピートを行わず、 +ソフトウェア(OS など)がキーリピートの処理を行います。 +そのため、キーリピートを実装していない LUNA の PROM や +NetBSD/luna68k のブートローダではキーリピートは起きず、 +キーリピートを実装している NetBSD/luna68k カーネルではキーリピートが起こせます。 +キーリピートを起こす間隔をゲストのソフトウェアが測定しているということは、 +VM が高速動作するとキーリピートもそれに合わせて発生することになり、 +これをホスト側から防ぐ手段はありません。 +そこで nono ではキー入力が発生している間 +(キーが一つでも押されてからキーが全て離されるまでの間)、 +高速モードが指示されていても VM を一時的に等速モードに落として実行します。 +上記のアイコンがそれを区別しているのはこのためです。 +そのため、何らかの理由でキーが入りっぱなしになった場合 +(ALT + TAB やアクセラレータキーでメニューを開くと起きがちです) +高速モードが抑制されたままということが起きえます。 +その場合はソフトウェアキーボードからキー入力を解除するなどしてください。 +On LUNA, +key repeat is done by software(OS), not by the keyboard hardware. +For this reason, +key repeat doesn't occur on LUNA's PROM or NetBSD/luna68k's bootloader +that don't implement it, and +key repeat occurs on NetBSD/luna68k kernel that implements it. +Since the timing of key repeat is measured by the guest software, +if the VM is running faster than the real, +the key repeat will occur faster, too. +The host application doesn't have the way to avoid it. +Therefore, nono will temporarily suppress the full speed mode +while any keys are pressed. +That is why the above-mentioned icon distinguishes them. +If keys continue to be pressed for some reasons, +the VM also continues to run syncronized mode. +In this case, you can resolve it by using the software keyboard window. +
+ + + + +

5. 実行してみる Try it

+
5.1. NetBSD/luna68k を実行してみる Try NetBSD/luna68k
+
+つついさんが NetBSD/luna68k 9.2 の liveimage を用意されています。 +Tsutsui-san has provided a liveimage of NetBSD/luna68k 9.2. +
+
https://twitter.com/tsutsuii/status/1436381589211017217
+
+ここではこれを起動してみます。Let's try it. +
+
    +
  1. どこかに nono 用のディレクトリを用意し(例えば ~/nono/)、 その中に VM ディレクトリを用意します (例えば ~/nono/luna/)。 -その中に設定ファイル nono.cfg を用意します。 -nono に -c オプションで VM ディレクトリを指定して起動します。 -これだけでたぶん起動して NVRAM.DAT ファイルが自動的に作られます。 -ROM モニタについては最低限なんとなく雰囲気似せてあるので -再びこちら (NetBSD/luna68k: Information) 参照のこと。 -ここからどうやって NetBSD/luna68k をインストールするかについては待て次号。 -
    -% mkdir -p ~/nono/luna/
    -% echo "vmtype=luna" > ~/nono/luna/nono.cfg
    -% path/to/nono -c ~/nono/luna
    +Create a directory somewhere for nono (for example ~/nono/),
    +and create subdirectories for individual VMs in it
    +(for example ~/nono/luna/).
    +
    +
  2. 以下のリンクからイメージファイルをダウンロードして展開し、 +VM ディレクトリ ~/nono/luna/ に置きます。 +Download imagefile from the following link, +extract it and place it in the VM directory, ~/nono/luna/. +
    +http://teokurebsd.org/netbsd/liveimage/20210910-luna68k/ +
    + +
  3. 以下の内容の設定ファイル nono.cfg を VM ディレクトリ ~/nono/luna/ +に作成します。 +ここでは説明を簡単にするためネットワークなしにしていますが、 +ネットワーク設定は必要に応じて行ってください。 +Create a configuration file nono.cfg in the VM directory, ~/nono/luna/, +with following contents. +By the way, to simplify the explanation, we assume there is no network here. +However, please configure the network if necessary. +
    +vmtype = luna
    +spc0-id6-image = hd,liveimage-luna68k-with-packages-20210910.img
    +hostnet-driver = none
     
    +
  4. nono -c ~/nono/luna で起動します +(VM ディレクトリに自動的に NVRAM.DAT が作られます)。 +Run as nono -c ~/nono/luna. +(NVRAM.DAT will be created automatically in the VM directory) + +
  5. Emulated ROM Monitor が起動するので、 +初回は以下のように入力すると NetBSD が起動します。 +The emulated ROM Monitor will be executed. +Then, only for the first time, +entering the following can boot NetBSD. +
    +k⏎
    +⏎
    +⏎
    +d⏎
    +boot⏎
    +g⏎
    +x⏎
    +
    +画面はこんな感じのはずです (太字が入力部分)。 +You will see a screen like this. The bold text indicates +the characters you need to enter. +
    +NONO  Emulated ROM Monitor for LUNA-I
    +
    +** NVRAM Initialized.
    +
    +>k⏎
    +controller: dk  ?
    +drive unit: 0  ?
    +partition : c  ?d⏎
    +filename  : vmunix  ?boot⏎
    +>g⏎
    +Loaded.  Entry point = $00700000
    +>x⏎
    +
    +この内容は NVRAM.DAT に記録されているので次回以降は直接 NetBSD が起動します。 +The information you have just entered is recorded in the NVRAM, +so next time it will boot NetBSD automatically. +
  6. 初回起動時、 +Updating fontconfig cache はあほみたいに時間がかかりますが、 +nono がハングアップしてるわけではありません(>_<)。 +また初回は起動後数時間めちゃくちゃ重たいですが、 +これはバックグラウンドで makemandb が動くためで +nono のせいではありません(>_<)。 +At the first boot, you will see the console stops after printing +"Updating fontconfig cache". +This is because the infamous fontconfig takes very looooong time. +nono would not have hang-up. +In addition, at the first boot, you will feel it's too heavy for several hours. +This is because the infamous makemandb(8) runs heavily in the background +for a looooong time. +It's very sad to me that these two accidents which are far from the ideal +are the first experiences of newcomers. + +
  7. 終了する時は root +ユーザで “shutdown -p now” を実行してください。 +LUNA はソフトウェアから電源オフでき、 +VM の電源オフで nono も終了します。 +To quit, type “shutdown -p now” as the root user. +LUNA can be powered off by software, +and nono will terminate when the VM is powered off. +
+
+ +
5.2. OpenBSD/luna88k を実行してみる Try OpenBSD/luna88k
+
+あおやまさんが OpenBSD/luna88k 7.0 の liveimage を用意されています。 +Aoyama-san has provided a liveimage of OpenBSD/luna88k 7.0. +
+
https://twitter.com/ao_kenji/status/1473611893386661888 +
+ここではこれを起動してみます。Let's try it. +
+
    +
  1. どこかに nono 用のディレクトリを用意し(例えば ~/nono/)、 +その中に VM ディレクトリを用意します (例えば ~/nono/luna88k/)。 +Create a directory somewhere for nono (for example ~/nono/), +and create subdirectories for individual VMs in it +(for example ~/nono/luna88k/). + +
  2. 以下のリンクから liveimage-luna88k-raw-20211221.img.gz +をダウンロードして展開し、 +VM ディレクトリ ~/nono/luna88k/ に置きます。 +Download liveimage-luna88k-raw-20211221.img.gz from the following link, +extract it and place it in the VM directory, ~/nono/luna88k/. +
    +http://www.nk-home.net/~aoyama/liveimage/ +
    + +
  3. 以下の内容の設定ファイル nono.cfg を VM ディレクトリ ~/nono/luna88k/ +に作成します。 +ここでは説明を簡単にするためネットワークなしにしていますが、 +ネットワーク設定は必要に応じて行ってください。 +Create a configuration file nono.cfg in the VM directory, ~/nono/luna88k/, +with following contents. +By the way, to simplify the explanation, we assume there is no network here. +However, please configure the network if necessary. +
    +vmtype = luna88k
    +spc0-id6-image = hd,liveimage-luna88k-raw-20211221.img
    +hostnet-driver = none
    +
    + +
  4. nono -c ~/nono/luna88k で起動します +(VM ディレクトリに自動的に NVRAM.DAT が作られます)。 +Run as nono -c ~/nono/luna88k. +(NVRAM.DAT will be created automatically in the VM directory) +
  5. Emulated ROM Monitor が起動するので、 +初回は以下のように入力すると OpenBSD が起動します。 +The emulated ROM Monitor will be executed. +Then, only for the first time, +entering the following can boot OpenBSD. +
    +nvram boot_filename boot⏎
    +y
    +b⏎
    +
    +画面はこんな感じのはずです (太字が入力部分)。 +You will see a screen like this. The bold text indicates +the characters you need to enter. +
    +NONO  Emulated ROM Monitor for LUNA88K
    +
    +** NVRAM Initialized.
    +
    +N>nvram boot_filename boot⏎
    +Update boot_filename : "vmunix" -> "boot" (Y/[N]):y
    +Updated
    +N>b⏎
    +
    +この内容は NVRAM.DAT に記録されているので次回以降は直接 OpenBSD が起動します。 +The information you have just entered is recorded in the NVRAM, +so next time it will boot OpenBSD automatically. + +
  6. 終了する時は root +ユーザで “shutdown -p now” を実行してください。 +LUNA-88K はソフトウェアから電源オフでき、 +VM の電源オフで nono も終了します。 +To quit, type “shutdown -p now” as the root user. +LUNA-88K can be powered off by software, +and nono will terminate when the VM is powered off. +
+
+ +
+
5.3 NetBSD/x68k を実行してみる Try NetBSD/x68k
+
+つついさんが NetBSD/x68k 9.2 の liveimage を用意されています。 +ここではこれを起動してみます。 +Tsutsui-san has provided a liveimage of NetBSD/x68k 9.2. Let's try it. +
+
    +
  1. どこかに nono 用のディレクトリを用意し(例えば ~/nono/)、 +その中に VM ディレクトリを用意します (例えば ~/nono/x68k/)。 +Create a directory somewhere for nono (for example ~/nono/), +and create subdirectories for individual VMs in it +(for example ~/nono/x68k/). + +
  2. 以下のリンクから +plain-install か with-packages のお好みのほうをダウンロードして展開し、 +VM ディレクトリ ~/nono/x68k/ に置きます。 +Download your favorite one of plain-install or with-packages +from the following link, +extract it and place it in the VM directory, ~/nono/x68k/. +
    +http://teokurebsd.org/netbsd/liveimage/20210613-x68k/ +
    + +
  3. 以下の内容の設定ファイル nono.cfg を VM ディレクトリ ~/nono/x68k/ +に作成します。 +初回起動時は liveimage は接続しません。 +Create a configuration file nono.cfg in the VM directory, ~/nono/x68k/, +with following contents. +You don't need to add the liveimage first time. +
    +vmtype = x68030
    +
    + +
  4. nono -c ~/nono/x68k で起動します。 +しばらくすると起動メディアが見付からず白帯が出ますので +メニューの「File > Exit」か×ボタンで終了します。 +これで IPLROM により初期化された SRAM が +VM ディレクトリに SRAM.DAT として保存されます。 +Run as nono -c ~/nono/x68k. +After a few seconds, a message will be displayed like this captured screen. +It says in Japanese that "Cannot boot from disk. Please set correct one". +Then, terminate the nono by "File > Exit" in menu or close button. +By this operation, SRAM will be initialized by X68030 IPLROM and +be saved as SRAM.DAT in the VM directory. +
    + +
  5. ここで設定ファイル nono.cfg に先程ダウンロードしてきたディスクイメージを追加します (2行目)。 +Then, add a disk image downloaded earlier to configuration file nono.cfg +(see 2nd line). +
    +vmtype = x68030
    +spc0-id0-image = hd,liveimage-x68k-with-packages-20210613.hds
    +
    + +
  6. もう一度 nono -c ~/nono/x68k で起動すると、 +HDD から NetBSD/x68k が起動します。 +次回以降はこれだけで直接 NetBSD が起動します。 +Again, run as nono -c ~/nono/x68k. +NetBSD/x68k will be booted from HDD. +Next time, it will boot NetBSD automatically. + +
  7. 初回起動後数時間はめちゃくちゃ重たいですが、 +これはバックグラウンドで makemandb が動くためで +nono のせいではありません(>_<)。 +At the first boot, you will feel it's too heavy for several hours. +This is because the infamous makemandb(8) runs heavily in the background +for a looooong time. +It's very sad to me that an accident which is far from the ideal +is the first experiences of newcomers. + +
  8. NetBSD が起動した後なら (正確には powerd(8) が起動していれば)、 +終了する時はメニューの「デバイス > 操作 > 電源ボタンを押す」 +でシャットダウンして電源オフになり、 +VM の電源オフで nono も終了します。 +After NetBSD boots up (more precisely, if powerd(8) is running), +you can shutdown and power off by +"Device > Operation > Push Power button" on menu, +and nono will terminate when the VM is powered off. + +
-

ネットワーク設定 Setup network

+ +

6. ホストネットワーク設定例 Example of host network setup

-設定ファイルに +wm0 を持つ NetBSD ホストに tap(4) デバイスを用いて +nono のゲスト OS を接続する場合の設定例です。 +
    +
  1. +設定ファイル nono.cfg に以下の行を追加します +(と言いつつ NetBSD では書かなくてもデフォルトでこの動作になりますが) +Add the following line to configuration file, nono.cfg. +(Although you don't need to write it since these are default behavior +on NetBSD)
    -ethernet-hostdriver = tap
    +hostnet-driver = tap
    +hostnet-tap-devpath = auto
     
    -を追加し、VM ディレクトリに nono-ifup、nono-ifdown -というスクリプトを用意してください。 -nono は tap(4) をオープンし、 -そのデバイス名を引数にこれらのスクリプトを呼びます。 -

    -最もシンプルなケースだとおそらく + +

  2. デフォルトでは /dev/tap は一般ユーザからアクセスできないので、 +chmod で適当にパーミッションを与えます。 +番号の付いていないほうの /dev/tap だけでいいです。 +sysinst 等で OS をアップグレードするとパーミッションが 600 +に戻るのがハマりポイントです。 +By default, /dev/tap is only accessible to privileged user. +You need to chmod /dev/tap (without unit number) appropriately. +Note that upgrading using sysinst always reset the permission to 600. + +
  3. bridge(4) インタフェースを作成し、 +ホストの外部(物理)インタフェースをブリッジに追加しておきます。 +Create a bridge(4) interface, and +add your physical interface to the bridge.
    -# brconfig bridge0 create
    +# ifconfig bridge0 create
     # brconfig bridge0 add wm0
     
    -のようにして用意しておいた bridge0 に対して、 -(sudo の設定は別途行ってから) -次のような nono-ifup、nono-ifdown を用意すれば -wm0 の物理セグメントとブリッジできると思います。 - +常用するなら /etc の設定ファイルに書いておきましょう。 +If you use it regularly, +you can put configuration file into /etc. +
    +/etc/ifconfig.bridge0 +
    +create
    +up
    +!/sbin/brconfig $int add wm0
    +
    +
    +# /etc/rc.d/network restart
    +
    +
    + +
  4. +一般ユーザに戻って、 +VM ディレクトリかその親ディレクトリに +次のような 2つのスクリプトを用意します。 +nono は tap(4) をオープンし、 +そのデバイス名を引数にこれらのスクリプトを呼びます。 +sudo の設定は別途行ってください。 +Return to non-privileged user, and +create following two scripts in the VM directory or its parent directory. +nono will open tap(4) and +invoke these scripts with the name of the device as an argument. +In addition, you need to set up sudo separately.
    nono-ifup
     #!/bin/sh
    -sudo ifconfig $1 up
    -sudo brconfig bridge0 add $1
    +sudo /sbin/ifconfig $1 up
    +sudo /sbin/brconfig bridge0 add $1
     
    -nono-ifup +nono-ifdown
     #!/bin/sh
    -sudo brconfig bridge0 delete $1
    -sudo ifconfig $1 down
    +sudo /sbin/brconfig bridge0 delete $1
    +sudo /sbin/ifconfig $1 down
    +
    + +
    +% chmod +x nono-ifup nono-ifdown
     
    +
  5. nono を起動し、 +メニューの「モニタ > ホスト > ホストネットワーク」を開いて +HostNet Driver: tap になっていれば動いてるはずです。 +Run nono, +and open "Monitor > Host > Host Network" window from menu. +It's OK if you can see "HostNet Driver: tap". + +
+ +
+ + +

7. 既知の問題 Known Issues

+
+ +
+ + +

8. 過去のバージョンからの移行方法 How to migrate from old versions

+
+バージョンアップに伴い設定ファイル等に非互換が発生する場合があります。 +その場合は以下の移行方法を参照して設定ファイル等を更新してください。 +Some versions may have incompatibilities in the configuration files, etc. +In such case, you may need to upgrade it by referring the following link. + +
+ + +

9. 変更履歴 Changes

+
+See changes.html. +
+ + +

10. 連絡先、ライセンス等 Contact, License, etc

+ +
10.1. ライセンス License
+
+See nono-license.txt. +
+
+
+また nono は無償公開されている X68030 の IPLROM を使用しています。 +許諾条件を読んでください。 +nono uses X68030 IPLROM image distributed without charge. +You must read +the license agreement +(even though it's Japanese original text only). +
+ +
10.2. 連絡先 Contact us
+
+バグ報告などは以下にお願いします。日本語でおk。 +If you find any problems, please let me know. +You may write in English.
+https://github.com/isaki68k/nono-issue/issues
+
10.3. パッチの提供について About contributes
+
+パッチを提供してくださる場合は以下に同意したものとします。 +If you provide a patch to nono, we assume that you agree the following +conditions: + +
+ +
10.4. Acknowledgements
+
+nono は以下の広告条項を含むソースコードを利用しています。 +nono uses source code with the following advertising clause. +
+This product includes software developed by Gordon Ross
+This product includes software developed by the University of California, Lawrence Berkeley Laboratory.
+
+
-

注意 Note

-まだアルファリリースなので、 -すべての仕様は今後互換性なく変更するかも知れません。 -This is alpha quality release. -All specifications on this page may be changed -without compatibility in the near future.
-isaki@NetBSD.org +nono project